我有两个共享同一组断言的测试:
class MyControllerTest < ActionController::TestCase
test "send mail and save to db" do
...
assert_equal 1, User.count
assert_equal 1, ActionMailer::Base.deliveries.size
assert_equal good_md5, Digest::MD5.hexdigest(attachment.decoded)
assert_response :success
...
test "send mail and don't save to db" do
...
assert_equal 0, User.count
assert_equal 1, ActionMailer::Base.deliveries.size
assert_equal good_md5, Digest::MD5.hexdigest(attachment.decoded)
assert_response :success
...
end
我可以做些什么来重用这些断言,所以我不必在每次测试中重复它们?
assert_equal 1, ActionMailer::Base.deliveries.size
assert_equal good_md5, Digest::MD5.hexdigest(attachment.decoded)
assert_response :success
我试图将它们放入模块中,但我无法在测试块中使用include。
答案 0 :(得分:0)
我不知道它是否可以在ActionController :: TestCase中运行,但我倾向于将共享测试(和其他东西)作为我可以从我的测试调用的独立方法放在我的文件的末尾。类似的东西:
class MyControllerTest < ActionController::TestCase
test "send mail and save to db" do
...
test_values = HashWithIndifferentAccess.new
test_values[:user_count] = 1
test_values[:deliveries] = 1
test_values[:md5] = good_md5
validate_values test_values
end
end
def validate_values(test_values)
assert_equal test_values[:user_count], User.count
assert_equal test_values[:deliveries], ActionMailer::Base.deliveries.size
assert_equal test_values[:md5], Digest::MD5.hexdigest(attachment.decoded)
assert_response :success
end
有很多变化 - 你可以只发送值而不是将它们放在哈希中,你可以构造你的测试值,这样你就可以围绕你的assert_equal循环,所以你只需要写一次,等等。
安美居。希望有所帮助。