确定 assert_not 子句在 Rails 4 测试中通过了什么错误?
Determine what error assert_not clause passes with in a Rails 4 test?
我测试我的对象是否使用 assert_not
验证失败,所以它实际上通过了失败的验证。但是,我想知道它具体在哪些验证上失败了。
本质上,我如何确保我的对象至少在我的情况下失败 validates_acceptance_of :terms
?
class StaffTest < ActiveSupport::TestCase
context "Save staff and validate" do
setup do
@staff = Fabricate.build(:staff)
@new_staff = Staff.new
end
teardown do
@staff = nil
@new_staff = nil
end
should "fail if save without accepting terms" do
@staff.validate_terms = true
assert_not @staff.valid?, @staff.errors.full_messages.inspect
end
end
end
据推测,我希望我的测试通过,因为它没有通过密码验证。然而,实际上,它确实通过了,但它通过了,因为它在条款验收验证方面失败了。在这种情况下,我的测试没有达到目的。因此,我想确保测试通过正确的失败。
我正在使用 Rails 4、Shoulda 和 ActiveSupport::TestCase(Minitest)
@staff.errors.messages 将包含每个错误字段名称和相应消息的散列。您可以将其用于此目的。
assert !@staff.save
assert @staff.errors.messages.values.include?("msg must be there")
我测试我的对象是否使用 assert_not
验证失败,所以它实际上通过了失败的验证。但是,我想知道它具体在哪些验证上失败了。
本质上,我如何确保我的对象至少在我的情况下失败 validates_acceptance_of :terms
?
class StaffTest < ActiveSupport::TestCase
context "Save staff and validate" do
setup do
@staff = Fabricate.build(:staff)
@new_staff = Staff.new
end
teardown do
@staff = nil
@new_staff = nil
end
should "fail if save without accepting terms" do
@staff.validate_terms = true
assert_not @staff.valid?, @staff.errors.full_messages.inspect
end
end
end
据推测,我希望我的测试通过,因为它没有通过密码验证。然而,实际上,它确实通过了,但它通过了,因为它在条款验收验证方面失败了。在这种情况下,我的测试没有达到目的。因此,我想确保测试通过正确的失败。
我正在使用 Rails 4、Shoulda 和 ActiveSupport::TestCase(Minitest)
@staff.errors.messages 将包含每个错误字段名称和相应消息的散列。您可以将其用于此目的。
assert !@staff.save
assert @staff.errors.messages.values.include?("msg must be there")