在从Rails 4.0升级到4.1之前,我正在使用没有Spring的RSpec / Guard,并且除了绿点和绿色文本之外我的所有测试都没有任何输出。在升级并安装Spring以及我认为需要的任何其他内容后,我在通过测试时遇到错误,有时我的测试由于“唯一性”错误而无法通过。
传递和失败测试之间的常见错误:
An error occurred in an after(:all) hook.
NameError: uninitialized constant Recipe
occurred at /home/user/.rvm/gems/ruby-2.1.0@global/gems/activesupport-4.1.0/lib/active_support/inflector/methods.rb:238:in 'const_get'
现在,after(:all)钩子只删除所有Manager :: Wine对象(以及一个Manager :: Wine对象has_many配方)。 Manager是一个rails引擎,它有Wine和Recipe模型。 Wine类中没有任何地方明确指定配方常量。但正如我之前所说,在我升级并安装Spring之前,这个错误并未出现在常规的RSpec / Guard测试中。
其他失败是'已经采取的属性'的结果。例如,标准的'有效工厂'测试因创建()而失败。但我在RSpec中指出:
config.before(:each) do
DatabaseCleaner.start
end
我在Spring之前的随机测试中没有得到这些错误。
Gemfile片段:
group :development, :test do
gem 'spring'
gem 'rspec-rails'
gem 'guard'
gem 'guard-rspec', require: false
gem 'spring-commands-rspec'
gem 'factory_girl_rails'
gem 'database_cleaner'
end
Guardfile包含:
guard :rspec, cmd:"spring rspec" do
Rails app_root / bin包含文件:
rails
rake
rspec
spring
???
答案 0 :(得分:0)
真奇怪。之前我没有收到过这个问题的通知,但是应用程序不再能够确定葡萄酒和食谱之间的HABTM关系。我更新了我的模型以包含join_table
参数,我不再获得未定义的常量'错误。我只是发现了这个,因为我在浏览器中加载了应用程序,并得到了更好的错误消息来处理。仍然遇到重复输入的问题'的问题。
此外,我删除了每个模型上的destroy_all调用,因为我认为考虑到DatabaseCleaner在每个任务之后运行,这是不必要的。