我目前在User
课程中使用此方法:
def self.authenticate(email, password)
user = User.find_by_email(email)
(user && user.has_password?(password)) ? user : nil
end
如何对此进行rspec测试?
我试图运行it { responds_to(:authenticate) }
,但我认为自我的东西与身份验证不同。
我仍然是rails的初学者,我们非常感谢有关如何测试和解释self
关键字的任何提示!
答案 0 :(得分:4)
describe User do
let(:user) { User.create(:email => "foo@bar.com", :password => "foo") }
it "authenticates existing user" do
User.authenticate(user.email, user.password).should eq(user)
end
it "does not authenticate user with wrong password" do
User.authenticate(user.email, "bar").should be_nil
end
end
答案 1 :(得分:1)
@ depa的答案很好,但是为了替代方案而且我更喜欢更短的语法:
describe User do
let(:user) { User.create(:email => email, :password => password) }
describe "Authentication" do
subject { User.authenticate(user.email, user.password) }
context "Given an existing user" do
let(:email) { "foo@bar.com" }
context "With a correct password" do
let(:password) { "foo" }
it { should eq(user) }
end
context "With an incorrect password" do
let(:password) { "bar" }
it { should be_nil }
end
end
end
end
除了我对sytax的偏爱之外,我相信这比其他风格有两大优点:
password
所做的那样)这就是为什么使用context
和subject
以及let
的组合对我来说远远优于通常的风格。