我正在尝试为我的Rails应用设置测试。我正在使用Factory Girl和Rspec with Sorcery进行身份验证。由于某种原因,这个测试没有通过:
describe "User" do
it "has a valid the factory" do
user = FactoryGirl.create(:user)
user.should be_valid
end
end
但是这个确实:
describe "User" do
it "has a valid the factory" do
user = FactoryGirl.build(:user)
user.should be_valid
end
end
测试失败的错误表明密码与其确认不符,所以看起来这与Sorcery如何处理密码加密有关。
还有其他人遇到过这个问题吗?它与Sorcery如何加密密码有关吗?这是故意还是错误?
答案 0 :(得分:1)
build
有效,因为构建的对象确实是一个有效的对象,尽管只存在于内存中。
create
无效,因为save
失败。
我认为,保存失败的原因应该是激活。我没有巫术的经验,只有Devise,原则是相似的。看来Sorcery默认根据自述文件要求激活。
通过在创建后添加激活钩子,可以很容易地直接在工厂定义中修复它。
FactoryGirl.define do
factory :user do
# other fields
after(:create) { |user| user.activate! }
end
end
答案 1 :(得分:0)
好的,您必须将用户定义添加到FactoryGirl:
factory :user do
...
password "foobar"
password_confirmation "foobar"
end
你的模型看起来像:
class User < ActiveRecord::Base
authenticates_with_sorcery!
validates :password, confirmation: true
validates :password_confirmation, presence: true
end
它绝对有效。
激活或加密没有任何内容。