ruby-on-rails - 为什么 FactoryGirl( :build) work with Sorcery, 而不是 FactoryGirl( :create)?

标签 ruby-on-rails rspec factory-bot sorcery

我正在尝试为我的 Rails 应用程序设置测试。我使用 Factory Girl 和 Rspec 与 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 如何加密密码有关吗?这是故意的还是错误?

最佳答案

build 是有效的,因为构建的对象确实是一个有效的对象,尽管仅存在于内存中。

由于保存失败,创建无效。

保存失败的原因我想应该是Activation的问题。我没有巫术经验,只有设计经验,原理是相似的。根据其自述文件,Sorcery 似乎默认要求激活。

通过在创建后添加激活钩子(Hook),可以很容易地直接在工厂定义中修复它。

FactoryGirl.define do
  factory :user do
    # other fields
    after(:create) { |user| user.activate! }
  end
end

关于ruby-on-rails - 为什么 FactoryGirl( :build) work with Sorcery, 而不是 FactoryGirl( :create)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16617717/

相关文章:

ruby-on-rails - "before :each do" block 未在 rspec 中运行

ruby - 带有选项的 paralell_rspec --exclude-pattern

ruby-on-rails - 我如何使用具有方法 : :post? 的 Capybara click_link

javascript - 在启用 js 的情况下运行 capybara 测试时不呈现 CKEditor

javascript - 在 Ember 中保存关联记录

capybara - RSpec-rails-capybara-:js => true and without的不同失败

ruby-on-rails - 是否可以在工厂 (FactoryGirl) 中使用 if 语句?

ruby-on-rails - 工厂女孩: can one reopen factory definitions and complete them?

ruby-on-rails - Rails 6 和操作邮箱设置

ruby-on-rails - 添加迁移然后删除迁移文件