什么是测试模型在rails中是否有效的最佳实践方法?例如,如果我有一个用户模型验证email_address属性的唯一性,那么如何检查发布的表单是否返回了错误(或者更好,特别是为该字段返回了错误)。Rails断言表单有效
我觉得这应该是显而易见的事情,但正如我很快发现的,我仍然没有完全掌握有效的谷歌问题的词汇。
什么是测试模型在rails中是否有效的最佳实践方法?例如,如果我有一个用户模型验证email_address属性的唯一性,那么如何检查发布的表单是否返回了错误(或者更好,特别是为该字段返回了错误)。Rails断言表单有效
我觉得这应该是显而易见的事情,但正如我很快发现的,我仍然没有完全掌握有效的谷歌问题的词汇。
最简单的方法很可能是:
class UserEmailAddressDuplicateTest < ActiveSupport::TestCase
def setup
@email = "[email protected]"
@user1, @user2 = User.create(:email => @email), User.new(:email => @email)
end
def test_user_should_not_be_valid_given_duplicate_email_addresses
assert [email protected]?
end
def test_user_should_produce_error_for_duplicate_email_address
# Test for the default error message.
assert_equal "has already been taken", @user2.errors.on(:email)
end
end
当然,这可能是你不希望创建一个单独的测试案例此行为,在这种情况下,你可以复制的设置方法的逻辑并将其包含在两个测试中(或将其置于私有方法中)。
或者,您可以将第一个(引用)用户存储在夹具中,如fixtures/users.yml
,并且只需在每个测试中实例化一个具有重复地址的新用户。
您认为合适的重构!
http://thoughtbot.com/projects/shoulda/
早该包括许多其他的东西一起进行测试之类的东西验证宏。值得检查TDD。
通过单元测试来测试模型当然是第一步。但是,这并不一定能保证用户能够获得他们需要的反馈。
Section 4 of the Rails Guide on Testing有很多关于功能测试(即测试控制器和视图)的良好信息。这里有几个基本的选项:检查闪存是否有关于错误的消息,或者使用assert_select来查找在出现错误时应该生成的实际HTML元素。后者实际上是测试用户真正获得消息的唯一方法。
errors.on是你想要的
http://api.rubyonrails.org/classes/ActiveRecord/Errors.html#M002496
@ obj.errors.on(:电子邮件)将返回nil是否为合法的,并且错误消息无论是在字符串的字符串数组或如果有一个或多个错误。
应该是岩石!真正有用的插件,用于改进测试套件和编写DRY测试。 – 2009-06-26 22:47:41