我有一个以下规格,我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
答案 0 :(得分:7)
您误解了expect
是什么。
expect(x).to receive(:y)
正在对y
上的x
方法进行删除。
即它正在对该方法进行论证。
一种描述这种方式的方法是,当你实际运行代码时,你正在y
调用方法x
&#34;
现在,你的规范并没有调用任何实际代码......它只是设定了期望......然后停止。
如果您正在测试方法login
,那么您不需要期望它,但实际上将其称为真实。
例如User.login(email: username, password: password, code: code)
你目前根本没有参加考试。只是你设置的存根,然后永远不会使用。