在集成测试时,ActionController :: ParameterMissing出现,尽管日志相反

时间:2016-09-30 12:00:34

标签: ruby-on-rails ruby ruby-on-rails-4 integration-testing

我已经使用Ubuntu 16.04 amd64服务器上https://gorails.com/setup/ubuntu/16.04的说明安装了Rails。我使用'rbenv'而不是任何其他选项。

我创建了一个名为'testapp'的新应用程序。

然后我执行了:

$ rails generate scaffold Test name:string age:integer

然后,我执行了:

$ bin/rails generate integration_test tests_post

我修改了test / integration / tests_post_test.rb,内容如下:

require 'test_helper'

class TestsPostTest < ActionDispatch::IntegrationTest

  test "can create an item" do
    get "/tests/new"
    assert_response :success
    post "/tests",
      params: { test: { name: 'Micky Mouse', age: 120 } }
    assert_response :redirect
    follow_redirect!
    assert_response :success
  end
end

然后我执行了:

rake test

这给了我以下错误:

Run options: --seed 24994

# Running:

.......E

Finished in 0.247049s, 32.3822 runs/s, 56.6689 assertions/s.

  1) Error:
TestsPostTest#test_can_create_an_item:
ActionController::ParameterMissing: param is missing or the value is empty: test
    app/controllers/tests_controller.rb:72:in `test_params'
    app/controllers/tests_controller.rb:27:in `create'
    test/integration/tests_post_test.rb:8:in `block in <class:TestsPostTest>'

8 runs, 14 assertions, 0 failures, 1 errors, 0 skips

然而,相关的日志记录显示以下内容:

--------------------------------------
TestsPostTest: test_can_create_an_item
--------------------------------------
Started GET "/tests/new" for 127.0.0.1 at 2016-09-30 07:50:18 -0400
Processing by TestsController#new as HTML
  Rendered tests/_form.html.erb (13.6ms)
  Rendered tests/new.html.erb within layouts/application (16.4ms)
Completed 200 OK in 170ms (Views: 161.1ms | ActiveRecord: 0.0ms)
Started POST "/tests" for 127.0.0.1 at 2016-09-30 07:50:19 -0400
Processing by TestsController#create as HTML
  Parameters: {"params"=>{"test"=>{"name"=>"Mickey Mouse", "age"=>"120"}}}
Completed 400 Bad Request in 0ms (ActiveRecord: 0.0ms)

在开发和生产中,只有在测试中才会出现错误。我一直在查看我在其他项目中在网上看过的例子,但我没有看到我在这里特别做了什么。我创建了这些具体步骤,以尽可能简单地显示问题。任何想法如何让这个正常工作?这个版本的rake(11.3.0)中是否有错误?

1 个答案:

答案 0 :(得分:2)

您可能正在使用Rails 4(考虑到您正在关注的安装教程)。对于Rails 4,在发布集成测试时,您不需要包装params。改变这一行:

createIndex

func createIndex<Key, Element>(elms:[Element], extractKey:(Element) -> Key) -> [Key:Element] where Key : Hashable {
    var dict = [Key:Element]()
    for elm in elms {
        dict[extractKey(elm)] = elm
    }
    return dict
}

你会没事的。