我有几个集成测试,其中一些断言是相同的。对于可维护性问题,我想在一个独特的函数下重新组合每个测试的常见断言。
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'
在两个测试中重复了一点。我怎样才能让它更易于维护?
答案 0 :(得分:0)
您描述为"重复的部分"不应该在每次测试中断言。如果第一个测试在断言模板时失败,那么使用相同断言的其他测试也将失败。这意味着您应该将该测试逻辑提取到单个测试中,例如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
这是测试应用时不良做法的一个示例。单个测试应该对特定的逻辑/特征进行断言,而不是重复。如果您在测试套件中看到重复的代码/断言,则应将其提取到单个测试中。