【问题标题】:How do test the value of an attribute in a controller instance variable?如何测试控制器实例变量中的属性值?
【发布时间】:2018-06-08 15:28:36
【问题描述】:

我正在使用 rails 5 和 minitest。我想知道,如何测试控制器方法的实例变量中的字段值。我意识到如果我想测试变量是否已定义,我可以这样做

assert_not_nil assigns(:issue)

但我不太清楚是否要测试 @issue.stop_id 的值。我的控制器方法是

  # GET /issues/new
  def new
    unless user_signed_in?
      redirect_to new_user_session_path
    end
    @issue = Issue.new(stop_onestop_id: params[:stop_id], line_onestop_id: params[:line_id])
  end

我正在我的测试方法中尝试这个

  test "get index page" do
    get index_url
    assert_not_nil assigns(:issue)
    assert_equal test_stop_id, @issue.stop.id
    assert_equal test_line_id, @issue.line.id
    assert_response :success
  end

但我遇到了 NoSuchMethodError 在线问题

assert_equal test_stop_id, @issue.stop_id

在测试方法中

test "logged in should get issues page" do
    sign_in users(:one)
    test_stop_id = 1
    test_line_id = 1
    get new_issue_url, params: {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

【问题讨论】:

    标签: unit-testing controller ruby-on-rails-5 instance-variables minitest


    【解决方案1】:

    这可能不是处理它的最佳方法,但我注意到使用 assigns(:instance_var_name) 将返回实例变量的值,因此您可以通过以下方式测试值:

    issue_var = assigns(:issue)
    assert_equal test_stop_id, issue_var.stop_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多