我正在使用Rails 3.2.13和postgres,rspec 2.13,capybara 2.0.3和database_cleaner 0.9.1。我也在使用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运行时,在挂钩时发生此错误。我在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)
任何想法,我在这里缺少什么?
答案 0 :(得分:1)
我的问题根源似乎完全不同:
我正在使用深层嵌套对象(order_process有order_steps有option_items)。 Rails需要将这些嵌套对象称为“option_items_attributes”,依此类推。看来,在我的哈希深处,我无法将“option_items”转换为“option_items_steps”。