我有一些集成测试,其中一些断言是相同的。出于可维护性的考虑,我想在一个唯一的函数下重新组合每个测试的通用断言。

  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'并从其他测试中删除那些getassert_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/

10-16 22:22