0

我有一个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

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

4

1 回答 1

0

您可以使用 访问控制器实例变量assign,因此应该可以访问该实例变量的错误并测试 full_messages。before_action如果未创建记录的原因是因为某些内容无法create被调用,这可能不起作用。但是您可以测试“撬”gem 是否会发生这种情况并进行binding.pry创建的第一行。

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

  post :create, user: { 
    first_name: 'Alice',
    email: 'alice@example.com',
    password: 'adflihbrgshbart'
  }
  assert([], assign[:user].errors.full_messages)
于 2017-08-21T15:27:15.287 回答