【发布时间】:2015-03-29 12:14:46
【问题描述】:
我正在使用 rspec 和 factory girl 开发一个有用户的应用程序,每个用户都有很多媒体帖子。要使用 TDD,我使用的是 factory_girl。
设置应用程序后,我在 spec/factories 中得到了两个文件:
users.rb
FactoryGirl.define do
factory :user do
sequence(:first_name) {|n| "FirstName-#{n}"}
sequence(:last_name) {|n| "LastName-#{n}"}
sequence(:email) {|n| "email-#{n}@example.com"}
password 'chandan123'
password_confirmation 'chandan123'
end
end
还有 medias.rb
FactoryGirl.define do
factory :media do
sequence(:description) {|n| "Description #{n}"}
sequence(:url) {|n| "http://www.example-#{n}.com"}
association :user, factory: :user
factory :public_media do
permission Media.permissions[:is_public]
end
factory :private_media do
permission Media.permissions[:is_private]
end
end
end
现在,当我运行 rspec 时,出现以下错误:
$ rspec
Finished in 0.08492 seconds (files took 3.21 seconds to load)
0 examples, 0 failures
/Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/activemodel-4.2.0/lib/active_model/attribute_methods.rb:433:in `method_missing': undefined method `user=' for #<Media:0x007fb5d0b57b50> (NoMethodError)
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/attribute_assigner.rb:16:in `block (2 levels) in object'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/attribute_assigner.rb:15:in `each'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/attribute_assigner.rb:15:in `block in object'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/attribute_assigner.rb:14:in `tap'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/attribute_assigner.rb:14:in `object'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/evaluation.rb:12:in `object'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/strategy/build.rb:9:in `result'
from /Users/chandankumar/.rvm/gems/ruby-2.1.4/gems/factory_girl-4.4.0/lib/factory_girl/factory.rb:42:in `run'
我的问题是,为什么它不能识别用户工厂?为什么我会遇到异常。
更新:
我必须添加迁移才能在数据库/模型级别进行关联。一旦完成它就完美了。我的错,我的印象是 rspec 会给我失败消息而不是异常。
【问题讨论】:
-
为了清楚起见,您能否添加您的
Media和User模型的代码? -
感谢您的评论@PawełDawczak。你间接地向我指出了解决方案。在进行 TDD 时,我预计会失败而不是异常。这是获得异常而不是失败消息的预期行为吗?
-
说实话 - 我不确定工厂会以何种方式失败,因为每次在定义工厂之前,我都会先试驾我的模型 - 请检查答案!祝你好运!
-
同意。感谢您提出正确的方法。接受的答案。
标签: ruby-on-rails ruby rspec factory-bot