我正在尝试测试我的用户模型的类方法#registered_but_not_logged_in(email)
,该方法抓取第一个用户,该用户匹配具有confirmed_at
条目但从未登录的电子邮件(我用sign_in_count
来计算。我使用rspec和Factorygirl,再加上shoulda-matchers v2.8。
这是红宝石:
def self.registered_but_not_logged_in email
self.with_email( email ).confirmed.never_signed_in.first
end
我已经在Rails控制台中对此进行了测试,我知道它按预期工作,所以这不是一个逻辑问题,所以我在想我做错了什么在我的测试中:
describe User do
# create @user
describe ".registered_but_not_logged_in" do
it "returns a user that matches the provided email who is confirmed, but who has not yet signed in" do
@user.confirmed_at = 2.days.ago
@user.email = "fisterroboto5893@mailinator.com"
result = described_class.registered_but_not_logged_in("fisterroboto5893@mailinator.com")
expect(result).to be_instance_of(User)
end
end
在此示例中,result
为零。我知道这是@user
存在于数据库外的情况,而方法是主动检查数据库,但我不知道如何在使用rspec / factorygirl时处理这个问题。任何帮助都绝对值得赞赏!
答案 0 :(得分:0)
所以我不能100%确定为什么我正在做的事情正在发挥作用,但这是我在@nort和我的同事的帮助下偶然发现的解决方案:
it "returns a user that matches the provided email who is confirmed, but who has not yet signed in" do
@user.confirmed_at = 2.days.ago
@user.email = "fisterroboto5893@mailinator.com"
@user.sign_in_count = 0
@user.save!
expect(User.registered_but_not_logged("fisterroboto5893@mailinator.com")).to be_instance_of(User)
end
我相信正在发生的是拯救!正在将@user保存到测试数据库,否则当我针对不同的数据库开发时,该数据库完全没有填充。问题当然是我们无法测试不存在的数据。
作为奖励,请注意expect()。to ...是rpsec的首选约定。另外,described_class
我认为完全正常,但我现在更喜欢明确,因为我还在学习这些东西。