在Rails系统测试中查看失败触发器

时间:2017-08-21 14:20:08

标签: ruby-on-rails minitest system-testing

我有ActionController::TestCase失败了,我不知道为什么。

require 'test_helper'
class UsersControllerTest < ActionController::TestCase

  setup do
    @user = users(:bob)
    sign_in @user
  end

  test "should create user" do
    assert_difference('User.count') do
      post :create, user: { 
        first_name: 'Alice',
        email: 'alice@example.com',
        password: 'adflihbrgshbart'
      }
    end
  end
end

结果是

Failure:
UsersControllerTest#test_should_create_user [.../dev/test/controllers/users_controller_test.rb:23]
Minitest::Assertion: "User.count" didn't change by 1.
Expected: 5
  Actual: 4

有没有办法让post告诉我错误是什么?例如,有没有一种方法可以访问errors数组来调用errors.full_messages,当出现错误时,该数组通常在结果视图中可用?

1 个答案:

答案 0 :(得分:0)

您可以使用assign访问控制器实例变量,因此应该可以访问该实例变量的错误并测试full_messages。如果创建记录的原因是因为某些before_action阻止了create被调用,则此功能可能无效。但你可以测试一下这种情况是否发生在&#39; pry&#39; gem并将binding.pry作为创建的第一行。

无论如何,要检查实例变量......

  post :create, user: { 
    first_name: 'Alice',
    email: 'alice@example.com',
    password: 'adflihbrgshbart'
  }
  assert([], assign[:user].errors.full_messages)