为什么我的测试框架无法找到路由文件中定义的URL?

问题描述 投票:1回答:1

我正在使用Rails 5和最小的并尝试为控制器编写测试。测试是

# issues_controller_test.rb
class IssuesControllerTest < ActionDispatch::IntegrationTest

  include Devise::Test::IntegrationHelpers

  test "logged in should get issues page" do
    sign_in users(:one)
    test_stop_id = 1
    test_line_id = 1
    get new_issue, :stop_id => test_stop_id, :line_id => test_line_id
    assert_equal test_stop_id, @issue.stop_id
    assert_equal test_line_id, @issue.line_id
    assert_response :success
  end
end

有问题的方法试图访问我的rails路由中定义的页面...

           new_issue GET      /issues/new(.:format)               issues#new

然而,当我运行测试时,我得到了这个错误

# Running:

.E

Error:
IssuesControllerTest#test_logged_in_should_get_issues_page:
NameError: undefined local variable or method `new_issue' for #<IssuesControllerTest:0x007f816759b330>
    test/controllers/issues_controller_test.rb:10:in `block in <class:IssuesControllerTest>'


bin/rails test test/controllers/issues_controller_test.rb:6



Finished in 0.103956s, 19.2389 runs/s, 9.6195 assertions/s.

为什么测试框架无法找到路由文件中定义的方法?

ruby-on-rails controller routes ruby-on-rails-5 minitest
1个回答
0
投票

new_issue那种方式只是一个无处定义的局部变量,尝试将其指定为new_issue_url的工作URL:

test 'logged in should get issues page' do
  sign_in users :one
  test_stop_id = 1
  test_line_id = 1
  get new_issue_url, stop_id: test_stop_id, line_id: test_line_id
  assert_equal test_stop_id, @issue.stop_id
  assert_equal test_line_id, @issue.line_id
  assert_response :success
end
© www.soinside.com 2019 - 2024. All rights reserved.