ruby-on-rails - 如何在 Rails 中测试任意路由?

标签 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

在我的 Contracts Controller 中我有这个 Action ......

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,我认为。

正确的做法是什么?

最佳答案

因为在您的测试代码中您使用的是 assigns(:contracts),您必须确保您的 Controller 方法正确地填充了 @contracts 变量。

可能是您错过了运行测试用例的一些先决条件。

关于ruby-on-rails - 如何在 Rails 中测试任意路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084073/

相关文章:

ruby-on-rails - Rails 5 ActiveRecord 查询 - 可以加入 3 个表吗?

c++ - 如何强烈分解代码单元测试一堆函数的所有参数

java - Mockito:调用层次结构中的模拟对象 - 链式调用

reactjs - Kotlin JS 中的单元测试

ruby-on-rails - Mailcatcher 无法在临时服务器中工作

ruby-on-rails - 使用 Garb 获取 Google Analytics 配置文件

ruby-on-rails - Rails 3.1。如何防止Rails使用CoffeeScript?

ruby-on-rails - 刷新使用 ||= 设置的类实例变量

ruby-on-rails - 使用字符串作为类关联名称 Rails

ruby-on-rails - 使用新的Rails/MongoID应用程序配置RSpec