Huy*_*Huy 12 tdd rspec ruby-on-rails capybara ruby-on-rails-3
我正在尝试编写集成测试,如果用户单击按钮,它会在数据库中创建一条新记录(CheckPrice模型).
我nil is not a symbol尝试运行测试时遇到错误.
require 'spec_helper'
describe 'CheckPrice', type: :request, js: true do
it "should create a new CheckPrice record when user clicks Check Price on topic page" do
city = create :city
hotel = create :hotel
affiliate_link = create :affiliate_link
visit '/hotel-bilboa-hotel'
sleep 2
click_button "Check Prices"
response.should change(CheckPrice.count).by(1)
end
end
Run Code Online (Sandbox Code Playgroud)
单击"检查价格"时,会有一个事件侦听器触发checkprices_controller中的新方法.
错误似乎发生在最后一行response.should change(CheckPrice.count).by(1).看起来该方法无法识别模型CheckPrice.如何引用CheckPrice表?
谢谢.
Thi*_*ilo 16
我不认为你可以change在响应对象上使用这样的匹配器.试试这个:
expect {
click_button "Check Prices"
}.to change{ CheckPrice.count }.by(1)
Run Code Online (Sandbox Code Playgroud)
这也使IMO更具语义意义.
有关更多示例,请参阅此备忘单.
Nyc*_*cen 15
除了语义之外,回答原始问题(获得"nil不是符号")并帮助其他可能像我一样落在这里的人:确保使用大括号{}而不是括号().
所以(正确的)
response.should change{CheckPrice.count}.by(1)
response.should change(CheckPrice, :count).by(1)
Run Code Online (Sandbox Code Playgroud)
而不是(不会工作,上面2的混合)
response.should change(CheckPrice.count).by(1)
Run Code Online (Sandbox Code Playgroud)
编辑:
与推荐的expect语法相同的答案
所以(正确的)
expect{response}.to change{CheckPrice.count}.by(1)
expect{response}.to change(CheckPrice, :count).by(1)
Run Code Online (Sandbox Code Playgroud)
而不是(不会工作,上面2的混合)
expect{response}.to change(CheckPrice.count).by(1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4916 次 |
| 最近记录: |