如何在rails测试之间重用断言

时间:2016-03-12 15:59:34

标签: ruby-on-rails testing

我有两个共享同一组断言的测试:

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。

1 个答案:

答案 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循环,所以你只需要写一次,等等。

安美居。希望有所帮助。

相关问题