我是测试rails应用程序的新手。现在,我正在学习如何模拟方法。
我的方法是在我的用户模型中更改密码:
def change_password(user, pass)
self.update_attributes(user) if self.password_hash == self.encrypt_password(pass)
end
我想做的就是模拟方法update_attributes。为此,我写了一个测试:
let (:user) {FactoryGirl.build(:user)}
subject{user}
...
describe "#change_password" do
before {user.save}
context "when old password doesn't match" do
it "should not update password" do
user.should_not_receive(:update_attributes)
user.change_password(user,"invalid")
end
end
end
但是当我运行它时,我收到错误:
NoMethodError:
undefined method `should_not_receive' for #<User:0x0000000455daf8>
另外,我试图像这样模拟update_attributes方法:
user.change_password.should_not_receive(:update_attributes)
我又犯了一个错误:
ArgumentError:
wrong number of arguments (0 for 2)
我找不到任何关于如何使用属性模拟方法内部方法的手册。
请问有人能解决我的问题吗?
答案 0 :(得分:0)
要使用should_receive
方法,您需要设置config.mock_with :rspec
,但我已设置config.mock_with :mocha
。所以我应该使用expects
代替should_receive
。