为什么此测试会出现此错误?
1) Error:
PostIntegrationTest#test_should_not_show_comment_box_if_not_logged_in:
ArgumentError: bad argument (expected URI object or URI string)
test/integration/post_integration_test.rb:6:in `block in <class:PostIntegrationTest>'
require 'test_helper'
class PostIntegrationTest < ActionDispatch::IntegrationTest
test "should not show comment box if not logged in" do
get :show, 'id' => 1 ########### LINE 6
assert_select 'textarea', false, "Comment textarea must not exist if not logged in"
end
get :show, {'id' => 1}
get :show, {id: 1}
这表示你可以传递参数。 http://api.rubyonrails.org/classes/ActionController/TestCase/Behavior.html#method-i-get
这是使用get
参数的示例:http://guides.rubyonrails.org/testing.html#setup-and-teardown
$ rails -v
Rails 4.0.0
答案 0 :(得分:5)
:show
在集成测试中不可用,这些操作仅在Controller测试中可用。您需要使用您的网址的_path
帮助器或字符串表示。
test "should not show comment box if not logged in" do
# Assuming path is /posts. Replace accordingly.
get "/posts/1" ########### LINE 6
assert_select 'textarea', false, "Comment textarea must not exist if not logged in"
end
答案 1 :(得分:4)
从Rails Testing Guide中给出的示例中我们看到,在集成测试中,get / post / put / delete有一个url作为第一个参数。虽然控制器测试具有操作名称。
因为在控制器测试中 minitest 知道调用了哪个控制器的操作(show,destroy,new,create),因为我们在中指定了控制器名称我们的测试类名称。因此,在集成测试中,我们必须传递网址。