我正在使用带有 postgres、rspec 2.13、capybara 2.0.3 和 database_cleaner 0.9.1 的 Rails 3.2.13。我也在使用 AngularJS。我有一个带有 js:true 的规范,它测试表单的提交(创建一个标准的 rails 模型实例)。唯一可能不是标准 Rails 的是我使用 AngularJS 通过 Ajax 提交此表单。每当规范运行时,我都会收到以下错误:
An error occurred in an after hook
NoMethodError: undefined method `each' for nil:NilClass
occurred at /Users/morgler/.rvm/gems/ruby-1.9.3-p194@pennyworth/gems/activerecord- 3.2.13/lib/active_record/associations/collection_association.rb:310:in `replace'
该规范随后失败。在我看来,这个错误发生在 database_cleaner 运行时的 after 钩子中。我在我的 spec_helper.rb 中得到了这个:
config.before(:each) do
if Capybara.current_driver == :rack_test
DatabaseCleaner.strategy = :transaction
else
DatabaseCleaner.strategy = :truncation
end
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
单击表单的提交按钮后通过 AngularJS 提交表单的代码是:
$scope.saveOrderProcess = (event) ->
if $scope.orderProcess.id
$scope.orderProcess.$update()
else
OrderProcess.create($scope.orderProcess)
知道吗,我在这里缺少什么?