我有一些集成测试,其中一些断言是相同的。出于可维护性的考虑,我想在一个唯一的函数下重新组合每个测试的通用断言。
test "login with invalid information" do
get login_path
assert_template 'sessions/new'
post login_path, params: { session: { email: "", password: "" } }
assert_template 'sessions/new'
assert_not flash.empty?
get root_path
assert flash.empty?
end
test "login with valid information followed by logout" do
get login_path
assert_template 'sessions/new'
post login_path, params: { session: { email: @user.email, password: "password" } }
.
end
例如,
get login_path
assert_template 'sessions/new'
在两个测试中重复该位。我该如何使其更易于维护?
最佳答案
您描述为“重复”的部分不应在每个测试中都置为有效。如果第一个测试在声明模板时失败,则其他使用相同声明的测试也将失败。这意味着您应该将该测试逻辑提取到单个测试中,例如test 'login rendered template'
并从其他测试中删除那些get
和assert_template
:
test "login rendered template" do
get login_path
assert_template 'sessions/new'
end
test "login with invalid information" do
# template assertion already done in previous test
post login_path, params: { session: { email: "", password: "" } }
# [...]
end
这是测试应用程序中不良做法的一个示例。单个测试应针对特定的逻辑/功能做出断言,并且不应重复进行。如果您在测试套件中看到重复的代码/断言,则应该将其提取到单个测试中。
关于ruby-on-rails - 将重复的断言封装在函数中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45984387/