0

레일즈 3.2.13을 postgres, rspec 2.13, capybara 2.0.3 및 database_cleaner 0.9.1과 함께 사용하고 있습니다. AngularJS도 사용하고 있습니다. js : true (표준 레일 모델 인스턴스 작성) 양식 제출을 테스트하는 스펙이 있습니다. 표준 레일이 아닌 유일한 것은 AngularJS를 사용하여 Ajax를 통해이 양식을 제출한다는 것입니다. 사양이 실행될 때마다 다음과 같은 오류가 발생합니다.후크에서 오류가 발생했습니다. NoMethodError : 정의되지 않은 메소드 'each'for nil : 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가 실행될 때 애프터 훅에서이 오류가 발생하는 것 같습니다.

$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와를 통해 양식을 제출 : 내 spec_helper.rb이있어? (order_process이 order_steps이 option_items있다) 나는 깊이 중첩 된 객체를 사용하고

:

답변

1

내 문제의 뿌리는 하나 완전히 다른 것 같다. Rails는 이러한 중첩 된 객체가 "option_items_attributes"라고 불리는 것이 필요합니다. 내 해시 어딘가 깊은 곳에서 "option_items"를 "option_items_steps"로 변환하지 못했습니다.