【问题标题】:Allowing multiple AssertionErrors before failing a test在测试失败之前允许多个 AssertionErrors
【发布时间】:2013-08-29 00:33:00
【问题描述】:

有没有一种传统的方法来尝试在未通过测​​试之前对一组asserts 进行评估?

假设我的测试评估了页面上某些名称的存在:

var pageContent = 'dummy page content';

//.include(haystack, needle, [message])
//Asserts that haystack includes needle.

assert.include(pageContent, 'Alice');
assert.include(pageContent, 'Bob');
assert.include(pageContent, 'John');

现在,如果 Alice 丢失,测试将失败并出现一个错误:

>AssertionError: expected 'dummy page content' to contain 'Alice'

但是,我希望收到通知,所有三个名称都丢失了,因为在这种情况下,失败一个条件并不会阻止评估其他条件。

与其编写一个包装方法来聚合这些检查的可能输出并抛出一个错误,我希望有第三方库可以“专门”处理这类事情,或者可能是我的内置功能我在俯瞰。

【问题讨论】:

    标签: node.js selenium mocha.js chai


    【解决方案1】:

    我可以提供两种方法。

    @Peter Lyons 提到的第一个依赖于将多个断言转换为对多个值的单个断言。为了使断言错误消息有用,最好在名称列表上断言:

    var expected = ['Alice', 'Bob', 'John'];
    var found = expected.filter(function(name) {
       return pageContent.indexOf(name) >= 0;
    }
    
    // assuming Node's require('assert')
    assert.deepEqual(found, expected);
    // Example error message:
    // AssertionError: ["Alice","Bob","John"] deepEqual ["Alice"]
    

    第二种方法使用“参数化测试”。我假设您使用 BDD 样式在我的代码中指定测试用例。

    describe('some page', function() {
       for (var name in ['Alice', 'Bob', 'John'])
         itContainsString(name);
    
       function itContainsString(name) {
          it('contains "' + name + '"', function() {
            var pageContent = 'dummy page content';
            assert.include(pageContent, 'Alice');
          });
       }
    }
    

    【讨论】:

      【解决方案2】:
      var found = ['Alice', 'Bob', 'John'].map(function (name) {
        return pageContent.indexOf(name) >= 0;
      });
      assert.include(found, true);
      

      如果我认为您对模糊断言的包装库的渴望听起来是错误的。您关于什么是“软”与“硬”断言失败的模糊规则和启发式方法似乎比使用现有断言范式的良好旧编程更不明智。这是测试。它应该是直截了当且易于推理的。

      请记住,您始终可以采用上述逻辑并将其包装在一个名为 includesOne(pageContent, needles) 的函数中,以便在测试中方便地重用它。

      【讨论】:

      • “软”断言正是我要去的地方,但我明白你的意思;我想对这些的需求表明我的测试缺乏教科书的原子性。也许我真正想要的是一种模式,它允许(在上面的示例中)从输入数组中创建 3 个单独的测试?我会选择类似于includesOne 的东西,但是我想不出一种方法可以将断言失败记录为缺失值的显式列表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多