【问题标题】:"nil is not a symbol" for model count in rspec matcherrspec 匹配器中模型计数的“nil 不是符号”
【发布时间】:2012-11-05 20:33:37
【问题描述】:

我正在尝试编写一个集成测试,如果用户点击一个按钮,它会在数据库中创建一条新记录(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

当点击“查看价格”时,有一个事件监听器会触发 checkprices_controller 中的新方法。

错误似乎发生在最后一行response.should change(CheckPrice.count).by(1)。看起来该方法无法识别模型 CheckPrice。如何引用 CheckPrice 表?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec tdd capybara


    【解决方案1】:

    我认为您不能在响应对象上使用像这样的change 匹配器。试试这个:

    expect {
      click_button "Check Prices"
    }.to change{ CheckPrice.count }.by(1)
    

    这也更符合语义,IMO。

    更多示例请参见this cheat sheet

    【讨论】:

      【解决方案2】:

      除了语义,回答最初的问题(得到“nil 不是符号”)并帮助可能像我一样出现在这里的其他人:确保使用大括号 {} 而不是括号 ()。

      所以(正确)

      response.should change{CheckPrice.count}.by(1)
      response.should change(CheckPrice, :count).by(1)
      

      而不是(不起作用,以上两种的混合)

      response.should change(CheckPrice.count).by(1)
      

      编辑:

      recommended expect syntax的答案相同

      所以(正确)

      expect{response}.to change{CheckPrice.count}.by(1)
      expect{response}.to change(CheckPrice, :count).by(1)
      

      而不是(不起作用,以上两种的混合)

      expect{response}.to change(CheckPrice.count).by(1)
      

      【讨论】:

        【解决方案3】:

        另一种方法是:

        expect do
            click_button "Check Prices"
        end.to change(CheckPrice, :count).by(1)
        

        这表明CheckPrice 上的count 方法的输出应该会发生变化。当向change 传递两个参数时,假设一个是接收者,另一个是要发送的符号。

        【讨论】:

          【解决方案4】:

          我遇到了同样的问题,正如其他答案所说,expectchange 方法在这种情况下都需要一个块作为参数。

          因此,在 Rails 中,您可以使用 { } 或 do end 语法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-17
            • 2014-01-11
            • 1970-01-01
            • 1970-01-01
            • 2019-12-19
            • 1970-01-01
            相关资源
            最近更新 更多