0

我正在使用带有 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)

知道吗,我在这里缺少什么?

4

1 回答 1

1

我的问题的根源似乎完全不同:

我正在使用深度嵌套的对象(order_process 有 order_steps 有 option_items)。Rails 需要将这些嵌套对象称为“option_items_attributes”等等。看来,在我的哈希深处,我未能将“option_items”转换为“option_items_steps”。

于 2013-05-03T22:12:45.153 回答