在函数中封装重复的断言

时间:2017-08-31 14:51:31

标签: ruby-on-rails testing integration-testing

我有几个集成测试,其中一些断言是相同的。对于可维护性问题,我想在一个独特的函数下重新组合每个测试的常见断言。

  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'
在两个测试中重复了一点。我怎样才能让它更易于维护?

1 个答案:

答案 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

这是测试应用时不良做法的一个示例。单个测试应该对特定的逻辑/特征进行断言,而不是重复。如果您在测试套件中看到重复的代码/断言,则应将其提取到单个测试中。