Rspec + FactoryGirl + Faker 测试随机失败
Rspec + FactoryGirl + Faker tests failing randomly
我有一个研究案例项目,与 Rails 4,RSpec,FactoryGirl,Faker...
但是 rspec 测试在开发环境中随机失败。我正在搜索很多,但如果有人能帮我弄清楚,我将不胜感激。
以下是测试文件、工厂和模型的链接:
待测机型:https://github.com/freaktags/core/blob/master/app/models/user.rb
用户工厂:https://github.com/freaktags/core/blob/master/spec/factories/users.rb
自测:https://github.com/freaktags/core/blob/master/spec/models/user_spec.rb
当它失败时,总是产生一个堆栈,几乎像这样:
Failure/Error: @chloe = FactoryGirl.create(:user)
ActiveRecord::RecordInvalid:
translation missing: pt-BR.activerecord.errors.messages.record_invalid
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/validations.rb:57:in `save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/attribute_methods/dirty.rb:29:in `save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:273:in `block in save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:329:in `block in with_transaction_returning_status'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `block in transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/database_statements.rb:209:in `within_new_transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:208:in `transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:326:in `with_transaction_returning_status'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:273:in `save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/configuration.rb:14:in `block in initialize'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/evaluation.rb:15:in `[]'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/evaluation.rb:15:in `create'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:12:in `block in result'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:9:in `tap'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:9:in `result'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:42:in `run'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:23:in `block in run'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activesupport-4.1.8/lib/active_support/notifications.rb:161:in `instrument'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:22:in `run'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
# ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'
您将区域设置更改为 rails 默认设置以外的其他内容,并且收到没有翻译成该区域设置的错误。
一个简单的解决方法是暂时将语言环境更改回默认设置,这样您更有可能收到实际的错误消息(看起来 activerecord
试图告诉您一些事情,但它没有我不知道在 pt-BR
中怎么说)。它会用英文告诉你这个错误,但看起来你懂英文所以应该不是问题。
修复错误,然后将语言环境切换回您想要的语言环境,错误应该不会再出现。
如果您需要避免更改区域设置,则需要为特定错误添加适合您选择的区域设置的翻译。其他地方的资源可以帮助完成此过程。以下是一些相关信息的链接:
- http://guides.rubyonrails.org/i18n.html
- http://archive.railsforum.com/viewtopic.php?id=46725
- ActiveRecord error messages: translation for fields
更新:
在黑暗中拍摄,但您的特定错误可能与 FactoryGirl 在初始化期间出现问题有关。 . .这个答案看起来 可能 可以解决您的问题:.
问题是 Faker,它没有提供对电子邮件和用户名值的控制。无论如何,Ecnalyr 在发现问题方面提供了很多帮助:)
我有一个研究案例项目,与 Rails 4,RSpec,FactoryGirl,Faker...
但是 rspec 测试在开发环境中随机失败。我正在搜索很多,但如果有人能帮我弄清楚,我将不胜感激。
以下是测试文件、工厂和模型的链接:
待测机型:https://github.com/freaktags/core/blob/master/app/models/user.rb
用户工厂:https://github.com/freaktags/core/blob/master/spec/factories/users.rb
自测:https://github.com/freaktags/core/blob/master/spec/models/user_spec.rb
当它失败时,总是产生一个堆栈,几乎像这样:
Failure/Error: @chloe = FactoryGirl.create(:user)
ActiveRecord::RecordInvalid:
translation missing: pt-BR.activerecord.errors.messages.record_invalid
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/validations.rb:57:in `save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/attribute_methods/dirty.rb:29:in `save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:273:in `block in save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:329:in `block in with_transaction_returning_status'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `block in transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/database_statements.rb:209:in `within_new_transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:208:in `transaction'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:326:in `with_transaction_returning_status'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activerecord-4.1.8/lib/active_record/transactions.rb:273:in `save!'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/configuration.rb:14:in `block in initialize'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/evaluation.rb:15:in `[]'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/evaluation.rb:15:in `create'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:12:in `block in result'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:9:in `tap'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy/create.rb:9:in `result'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:42:in `run'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:23:in `block in run'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353@global/gems/activesupport-4.1.8/lib/active_support/notifications.rb:161:in `instrument'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:22:in `run'
# /Users/marceloboeira/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.5.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
# ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>'
您将区域设置更改为 rails 默认设置以外的其他内容,并且收到没有翻译成该区域设置的错误。
一个简单的解决方法是暂时将语言环境更改回默认设置,这样您更有可能收到实际的错误消息(看起来 activerecord
试图告诉您一些事情,但它没有我不知道在 pt-BR
中怎么说)。它会用英文告诉你这个错误,但看起来你懂英文所以应该不是问题。
修复错误,然后将语言环境切换回您想要的语言环境,错误应该不会再出现。
如果您需要避免更改区域设置,则需要为特定错误添加适合您选择的区域设置的翻译。其他地方的资源可以帮助完成此过程。以下是一些相关信息的链接:
- http://guides.rubyonrails.org/i18n.html
- http://archive.railsforum.com/viewtopic.php?id=46725
- ActiveRecord error messages: translation for fields
更新: 在黑暗中拍摄,但您的特定错误可能与 FactoryGirl 在初始化期间出现问题有关。 . .这个答案看起来 可能 可以解决您的问题:.
问题是 Faker,它没有提供对电子邮件和用户名值的控制。无论如何,Ecnalyr 在发现问题方面提供了很多帮助:)