如何在最小的失败状态下记录状态?

时间:2014-01-12 20:50:02

标签: ruby-on-rails ruby unit-testing minitest

说我有一个测试

describe "import stuff"
  it "should import correctly"
     imported_count = import_stuff()
     assert_equal 3, imported_count
  end
end

如何记录数据库状态,例如测试失败时puts ImportedStuff.all.to_json

我知道我可以像assert_equals 3, imported_count, 'my message'那样指定错误消息。但是,当测试成功时,我不想调用ImportedStuff.all.to_json。 assert_equals似乎只接受错误消息的字符串。

3 个答案:

答案 0 :(得分:0)

通常,您无需记录测试的数据库状态。测试可以帮助您确定一切是否正常,或者是否有需要您注意的事项。如果测试失败,那么您可以随时重新运行它,为数据库添加日志。

如果你想让日志存在,我会说要添加一个if:

imported_count = import_stuff()
if imported_count==3
 puts ImportedStuff.all.to_json
end
assert_equal 3, imported_count

您拥有的另一个选项是将日志记录放在after块中。

修改

如果您想在测试失败时记录错误,可以添加:

def teardown
  unless passed?
    puts ImportedStuff.all.to_json
  end
end

答案 1 :(得分:0)

最小的打印仅在断言失败时传递消息(https://github.com/seattlerb/minitest/blob/master/lib/minitest/assertions.rb#L127)。您可以传递“ImportedStuff.all.to_json”,并且不要害怕它会被计算成功断言。

您还可以将无参数Proc作为消息(而不是String)传递给所有minitest断言,当测试失败时将调用它,并将其结果打印为消息。

答案 2 :(得分:0)

虽然似乎没有记录,但您可以传递Proc作为消息。传递的proc将仅在失败时调用。

示例:

def print_db_state
  Proc.new { puts DimensionType.all.to_json }
end

describe "import stuff"
  it "should import correctly"
     imported_count = import_stuff()
     assert_equal 3, imported_count, print_db_state
  end
end

每次执行断言时,ImportedStuff.all.to_json都会调用all.to_json,即使测试没有失败 - 也不好。