2013-05-03 72 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」。

相關問題