Ruby on rails 如何在Rails中测试任意路由?
我想为非RESTful路由编写Rails功能测试 我正在使用Test::Unit 在Ruby on rails 如何在Rails中测试任意路由?,ruby-on-rails,ruby,unit-testing,testing,routes,Ruby On Rails,Ruby,Unit Testing,Testing,Routes,我想为非RESTful路由编写Rails功能测试 我正在使用Test::Unit 在routes.rb中,我有一条路线 match '/contract_search' => 'contracts#contract_search', \ :as => 'contract_search', \ :via => :post 在我的合同中,我有这个动作 def contract_search # ... end 在contracts\u controller\
routes.rb
中,我有一条路线
match '/contract_search' => 'contracts#contract_search', \
:as => 'contract_search', \
:via => :post
在我的合同中,我有这个动作
def contract_search
# ...
end
在contracts\u controller\u 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>'
1)错误:
使用搜索参数对合同进行测试(合同控制测试):
NoMethodError:nil:NilClass的未定义方法“length”
测试/功能/合同\u控制器\u测试。rb:49:in‘block in’
我的感觉是Test::Unit试图发布到/contracts/contract\u search
正确的方法是什么?问题不在于路由,而在于断言中的分配(:契约)
<代码>赋值(:契约)
为零,因此当您在其上调用length
时,它返回一个NoMethodError
答案必须在您的
合同搜索
操作中,您可以发布代码吗?因为在测试代码中您正在使用分配(:合同)
,您必须确保控制器方法正确填充@contracts
变量
您可能错过了运行测试用例的一些先决条件