RESTful でないルートの Rails 機能テストを書きたいと思います。
Test::Unit を使用しています。
私はこのroutes.rb
ルートを持っています...
match '/contract_search' => 'contracts#contract_search', \
:as => 'contract_search', \
:via => :post
そして、私のコントラクトコントローラーには、このアクションがあります...
def contract_search
# ...
end
試してみたcontracts_controller_test.rb
...
test 'POST to contracts with search params.' do
post(:contract_search, {
:contract_search => {
:title_like => 'System'
}
}, unprivileged_internal_user_session_vars, { })
assert(
assigns(:contracts).length == 6,
"@contracts.length #{assigns(:contracts).length} is incorrect."
)
end
アクションはブラウザで期待どおりに機能します。
しかし、テストはエラーになります...
1) Error:
test_POST_to_contracts_with_search_params.(ContractsControllerTest):
NoMethodError: undefined method `length' for nil:NilClass
test/functional/contracts_controller_test.rb:49:in `block in <class:ContractsControllerTest>'
私の感覚では、Test::Unit は に投稿しようとしている/contracts/contract_search
と思います。
これを行う正しい方法は何ですか?