【发布时间】:2014-01-17 01:11:07
【问题描述】:
使用:
-
factory_girl_rails v4.3.0 rails v4.0.1rspec-rails v2.14.0
我对@987654324@ 的第一次调用返回了一个所有nil 属性的对象。如果我再次调用它,它会按照工厂定义按预期构建对象。这是一个演示异常行为的撬动会话:
∴ rspec ./spec/controllers/admin/base_controller_spec.rb:10
Run options: include {:locations=>{"./spec/controllers/admin/base_controller_spec.rb"=>[10]}}
Frame number: 0/25
From: /Users/george/work/salescrm/spec/support/controller_helpers.rb @ line 3 ControllerHelpers#sign_in:
2: def sign_in(user_type = nil)
=> 3: binding.pry
4: user = FactoryGirl.create(user_type) unless user_type.nil?
5:
6: if user.nil?
7: request.env['warden'].stub(:authenticate!).
8: and_throw(:warden, {:scope => :user})
9: controller.stub :current_user => nil
10: else
11: request.env['warden'].stub :authenticate! => user
12: controller.stub :current_user => user
13: end
14: end
[1] salescrm(#<RSpec::Core::ExampleGroup::Nested_1>) » FactoryGirl::VERSION
=> "4.3.0"
[2] salescrm(#<RSpec::Core::ExampleGroup::Nested_1>) » user_type
=> :admin_user
[3] salescrm(#<RSpec::Core::ExampleGroup::Nested_1>) » FactoryGirl.build(user_type)
=> #<User:0x007fbc8e010d68> {
:id => nil,
:email => nil,
:encrypted_password => "",
:reset_password_token => nil,
:reset_password_sent_at => nil,
:remember_created_at => nil,
:sign_in_count => 0,
:current_sign_in_at => nil,
:last_sign_in_at => nil,
:current_sign_in_ip => nil,
:last_sign_in_ip => nil,
:created_at => nil,
:updated_at => nil,
:username => nil,
:first_name => nil,
:last_name => nil,
:roles_mask => nil
}
[4] salescrm(#<RSpec::Core::ExampleGroup::Nested_1>) » FactoryGirl.build(user_type)
=> #<User:0x007fbc8533ac90> {
:id => nil,
:email => "jan@email.com",
:encrypted_password => "$2a$04$ROK0DlxigvTmgXY.kNsdL.z3R15cbZM60UbDi4iIqMtX.C1g6Fiii",
:reset_password_token => nil,
:reset_password_sent_at => nil,
:remember_created_at => nil,
:sign_in_count => 0,
:current_sign_in_at => nil,
:last_sign_in_at => nil,
:current_sign_in_ip => nil,
:last_sign_in_ip => nil,
:created_at => nil,
:updated_at => nil,
:username => "jan_blogs",
:first_name => "Jan",
:last_name => "Blogs",
:roles_mask => 1
}
还有工厂:
FactoryGirl.define do
factory :user do
email 'joe@email.com'
username 'joe_blogs'
password 'my_password'
first_name 'Joe'
last_name 'Blogs'
factory :admin_user do
first_name 'Jan'
email 'jan@email.com'
username 'jan_blogs'
password 'my_password'
roles [:admin]
end
end
end
任何想法我做错了什么或发生了什么?谢谢。
【问题讨论】:
标签: ruby-on-rails-4 factory-bot