2013-05-03 47 views
0

我使用Rails 3.2.13与postgres,rspec 2.13,capybara 2.0.3和database_cleaner 0.9.1。我也使用AngularJS。我有一个测试提交表单(创建标准rails模型实例)的js:true规范。唯一可能不是标准Rails的是我使用AngularJS通过Ajax提交此表单。每当规格运行时,我得到以下错误:在钩子NoMethodError发生错误:undefined方法`each'为零:NilClass(AngularJS)

An error occurred in an after hook 
    NoMethodError: undefined method `each' for nil:NilClass 
    occurred at /Users/morgler/.rvm/gems/[email protected]/gems/activerecord- 3.2.13/lib/active_record/associations/collection_association.rb:310:in `replace' 

该规范随后失败。对我来说,似乎这个错误发生在database_cleaner运行后的挂钩之后。我得到这个在我的spec_helper.rb:

$scope.saveOrderProcess = (event) -> 
    if $scope.orderProcess.id 
    $scope.orderProcess.$update() 
    else 
    OrderProcess.create($scope.orderProcess) 

任何想法,我是缺少在这里:

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提交表单?

回答

1

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

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

相关问题