gpt4 book ai didi

ruby-on-rails - Stubbing 葡萄 helper

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:17 26 4
gpt4 key购买 nike

我有带 Grape API 的 Rails 应用。

接口(interface)由 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* 与某些特定用户 stub ?

我试过:

  • 设置env/request,但在调用get方法之前不存在。
  • 用 Mocha stub MyAPI::APIHelpers#current_user 方法
  • 用 Mocha stub MyAPI::Endpoints::Notes.any_instance.stub

编辑:目前,它是这样 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

但这绝对不是答案:)。

最佳答案

issue中提到的评论应该可以帮助你,这就是 Grape 测试它的助手的方式,

https://github.com/intridea/grape/blob/master/spec/grape/endpoint_spec.rb#L475(如果由于更改而代码不在同一行,只需执行 ctrl+f 并寻找帮助者)

这是来自同一个文件的一些代码

it 'resets all instance variables (except block) between calls' do
subject.helpers do
def memoized
@memoized ||= params[:howdy]
end
end

subject.get('/hello') do
memoized
end

get '/hello?howdy=hey'
last_response.body.should == 'hey'
get '/hello?howdy=yo'
last_response.body.should == 'yo'
end

关于ruby-on-rails - Stubbing 葡萄 helper ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com