说我有一个测试
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
似乎只接受错误消息的字符串。
答案 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
,即使测试没有失败 - 也不好。