失败/错误:预期:任何参数的1次,收到:任何参数的0次

时间:2014-08-12 22:11:15

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

我有一个以下规格,我mocking我的用户模型和stubbing方法。

require 'spec_helper'

describe User do 

  let(:username) {"test@test.com"}
  let(:password) {"123"}
  let(:code) {"0"}

  context "when signing in" do
    let(:expected_results) { {token:"123"}.to_json }

    it "should sign in" do 
      expect(User).to receive(:login).with({email: username, password: password, code: code})
        .and_return(expected_results)
    end

  end    
end

当我尝试运行我的测试用例时,我收到以下错误。

Failure/Error: expect(User).to receive(:login).with({email: username, password: password, code: code})
       (<User (class)>).login({:email=>"test@test.com", :password=>"123", :code=>"0"})
           expected: 1 time with arguments: ({:email=>"test@test.com", :password=>"123", :code=>"0"})
           received: 0 times

1 个答案:

答案 0 :(得分:7)

您误解了expect是什么。

expect(x).to receive(:y)正在对y上的x方法进行删除。

即它正在对该方法进行论证。

一种描述这种方式的方法是,当你实际运行代码时,你正在y调用方法x&#34;

现在,你的规范并没有调用任何实际代码......它只是设定了期望......然后停止。

如果您正在测试方法login,那么您不需要期望它,但实际上将其称为真实。

例如User.login(email: username, password: password, code: code)

你目前根本没有参加考试。只是你设置的存根,然后永远不会使用。