我有带有 Grape API 的 Rails 应用程序。
该接口由 Backbone 完成,Grape API 为其提供所有数据。
它返回的只是用户特定的东西,所以我需要参考当前登录的用户。
简化版如下所示:
API初始化:
module MyAPI
class API < Grape::API
format :json
helpers MyAPI::APIHelpers
mount MyAPI::Endpoints::Notes
end
end
端点:
module MyAPI
module Endpoints
class Notes < Grape::API
before do
authenticate!
end
# (...) Api methods
end
end
end
API 助手:
module MyAPI::APIHelpers
# @return [User]
def current_user
env['warden'].user
end
def authenticate!
unless current_user
error!('401 Unauthorized', 401)
end
end
end
所以,正如你所看到的,我从 Warden 那里得到了当前用户,它工作正常。但问题在于测试。
describe MyAPI::Endpoints::Notes do
describe 'GET /notes' do
it 'it renders all notes when no keyword is given' do
Note.expects(:all).returns(@notes)
get '/notes'
it_presents(@notes)
end
end
end
如何使用某些特定用户存根助手的方法 *current_user*?
我试过了:
- 设置 env/request,但在调用get方法之前它不存在。
- 使用 Mocha 存根 MyAPI::APIHelpers#current_user 方法
- 使用 Mocha 存根 MyAPI::Endpoints::Notes.any_instance.stub
编辑:目前,它是这样存根的:
规格:
# (...)
before :all do
load 'patches/api_helpers'
@user = STUBBED_USER
end
# (...)
规范/补丁/api_helpers.rb:
STUBBED_USER = FactoryGirl.create(:user)
module MyAPI::APIHelpers
def current_user
STUBBED_USER
end
end
但这绝对不是答案:)。