gpt4 book ai didi

ruby-on-rails - 使用 gon 和 rspec 的测试方法

转载 作者:行者123 更新时间:2023-12-04 06:34:53 25 4
gpt4 key购买 nike

我有一个函数可以在 gon 的帮助下向 js 发送一个变量。

def calc_foo
# calculate foo
gon.foo = foo
end

我想测试这个函数,即使用 rspec 确保该方法返回正确的值。
it "should return bar" do
foo = @foo_controller.calc_foo
expect(foo).to eq(bar)
end

但是,当测试用例到达将变量发送到 gon 的行时,我收到以下错误消息。
Failure/Error: foo = @foo_controller.calc_foo
NoMethodError:
undefined method `uuid' for nil:NilClass

我已经检查了 foo 的值,它不是 Nil,所以 gon 必须是 Nil。
我相信错误是我没有正确地包含 gon。这是我的 Gemfile 的 rspec 部分
#rspec-rails includes RSpec itself in a wrapper to make it play nicely with Rails. 
#Factory_girl replaces Rails’ default fixtures for feeding test data
#to the test suite with much more preferable factories.
group :development, :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'capybara'
gem 'gon'
end

那么我怎样才能让 rspec 与 gon 一起很好地发挥作用呢?
(我也尝试将 gon 包含在我的规范文件中,但没有成功)

最佳答案

在 Controller 规范(gon 所属的地方)中,您需要发出实际请求来绕过您的问题:

RSpec.describe ThingiesController do
let(:gon) { RequestStore.store[:gon].gon }

describe 'GET #new' do
it 'gonifies as expected' do
get :new, {}, valid_session # <= this one
expect(gon['key']).to eq :value
end
end
end

如果您不想坚持某些 controlleractiongon -相关规范(假设您的 gon 中有一个 ApplicationController 相关方法),您可以使用 Anonymous controller方法:
RSpec.describe ApplicationController do
let(:gon) { RequestStore.store[:gon].gon }

controller do
# # Feel free to specify any of the required callbacks,
# # like
# skip_authorization_check
# # (if you use `CanCan`)
# # or
# before_action :required_callback_name

def index
render text: :whatever
end
end

describe '#gon_related_method' do
it 'gonifies as expected' do
get :index
expect(gon['key']).to eq :value
end
end
end

我有很多 controllerrequest/ integration规范并可以确认 gon只要您提出实际请求,就可以在那里表现良好。

但是,尽管情况不同,但我仍然遇到与您类似的问题(从 shared_examples 规范中包含的 controller 提出请求)。我打开了相关 issue ,随时加入对话(对于任何感兴趣的人)。

关于ruby-on-rails - 使用 gon 和 rspec 的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996388/

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