【问题标题】:factory_girl: Strange error when creating objectsfactory_girl:创建对象时出现奇怪的错误
【发布时间】:2013-06-02 14:09:39
【问题描述】:

每当我调用任何 FactoryGirl 创建或构建方法时,都会收到一个奇怪的错误。

在我的规范文件中,我有一个前块,我想在其中创建一个基本的用户列表:

require 'spec_helper'

describe "Users" do
  before do
    create_list(:user, 3, :confirmed)
    @user = User.first
  end
end

这一行create_list 抛出以下错误:

TypeError: nil is not a symbol
./spec/requests/users_spec.rb:5:in `block (2 levels) in <top (required)>'

我唯一的工厂文件./spec/factories/user.rb 似乎已加载。 如果我在第一行引发错误,则在执行规范测试时会引发此错误。

这是我的工厂文件的内容:

FactoryGirl.define do
  factory :user, aliases: [:friend] do
    sequence(:username) { |n| "foo#{n}" }
    password "foobar"
    password_confirmation {"#{password}"}
    email { "#{username}@example.com" }
    date_of_birth 20.years.ago

    trait :admin do
      admin true
    end
    trait :game_admin do
       game_admin true
    end
    trait :confirmed do
      confirmed_at Time.now
    end
  end
end

【问题讨论】:

  • 由于您不使用FactoryGirl.create_list(...,如果您已经使用mixed the syntax methods into Rspec,请告诉我们。
  • 是的,我在我的 spec_helper 中加载了 FactoryGirl DSL:config.include FactoryGirl::Syntax::Methods
  • 如果我省略了 create_list 的所有参数,则会引发异常“参数数量错误”。所以似乎找到了create方法。
  • 一些消息:我发现问题出在friendly_id。我的用户模型在测试环境中为调用 User.primary_key 返回 nil。你知道如何解决这个问题吗?

标签: ruby-on-rails rspec capybara factory-bot rubymine


【解决方案1】:

问题解决了。 在深入挖掘完整跟踪后,我发现错误是在friendly_id 的一部分中引发的。 friendly_id 尝试使用我的模型 User 的 primary_key,但它返回 nil。 所以,User.send(key) 抛出这个错误。

我不知道为什么我的模型的 primary_key 突然为空,但是在以下 rake 命令之后,现在一切都很好:

rake db:drop
rake db:create
rake db:migrate
rake db:test:prepare

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 2023-03-07
    • 2023-03-09
    • 2015-06-03
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多