rspec接收方法无法按预期工作

Rya*_*Mes 4 ruby rspec ruby-on-rails ruby-on-rails-4

我无法理解为什么以下代码在运行我的测试时在rspec中不起作用.

Lead.update_status(2,2,true)
expect(Lead).to receive(:update_status).with(2, 2, true)
Run Code Online (Sandbox Code Playgroud)

我也试过了

Lead.update_status(2,2,true)
expect_any_instance_of(Lead).to receive(:update_status).with(2, 2, true)
Run Code Online (Sandbox Code Playgroud)

错误II得到的是

(<Lead(id: integer, contact_id: integer, course_presentation_id: integer, status: integer, created_by_user_id: integer, updated_by_user_id: integer, created_at: datetime, updated_at: datetime, mailchimp_status: integer) (class)>).update_status(2, 2, true)
           expected: 1 time with arguments: (2, 2, true)
           received: 0 times with arguments: (2, 2, true)
Run Code Online (Sandbox Code Playgroud)

请注意,如果我将"test"添加到我的代码中,则会打印出来,因此我知道update_status实际上正在运行.

有任何想法吗?谢谢.

Mar*_*pka 19

您应该将期望放在您希望调用该方法的代码之前:

expect(Lead).to receive(:update_status).with(2, 2, true)
Lead.update_status(2,2,true)
Run Code Online (Sandbox Code Playgroud)

  • @TrungDQ - https://relishapp.com/rspec/rspec-mocks/docs/basics/expecting-messages#passing-positive-message-expectation (2认同)