【问题标题】:How to expect throw with Mocha and Chai?如何期待 Mocha 和 Chai 的投掷?
【发布时间】:2019-03-27 04:34:27
【问题描述】:

我无法找到使用 Mocha 和 Chai 捕捉抛出的字符串的解决方案

正在测试的代码:

function SimpleDate(year, month, day) {
    if (!isValidDate(year, month, day)) {
        throw "invalid date";
    }
}

测试代码:

it("returns 'invalid date' for year = 2023, month = 13, day = 55", function () {
    let actual = new DateUtils.SimpleDate(2013, 13, 55);
    //let expected ='invalid date';
    let expected = expect(() => DateUtils.SimpleDate(2013, 13, 55)).to.throw('invalid date');


    assert.equal(actual, expected);
});

我希望测试通过,但我尝试过的代码失败,提示“错误:抛出字符串“无效日期”,抛出错误:)'

【问题讨论】:

    标签: javascript mocha.js chai


    【解决方案1】:

    原来的解决方案是定义一个包装器函数来调用你正在测试的函数,然后将包装器传递给 assert.throws

    it("returns 'invalid date' for year = 2023, month = 13, day = 55", function () {
        let year = 2013,
            month = 13,
            day = 55;
        let expectedMessage = 'invalid date';
        let wrapper = function () {
            let x = DateUtils.SimpleDate(year, month, day);
        }
    
        assert.throws(wrapper, expectedMessage);
    });
    

    【讨论】:

      【解决方案2】:

      我相信你应该抛出一个错误而不是一个字符串

      function SimpleDate(year, month, day) {
              if (!isValidDate(year, month, day)) {
                  throw new Error('invalid date');
              }
      }
      

      【讨论】:

      • 我曾尝试过,只是再次尝试,但仍然没有发现错误是 chai
      • 哦,我想我明白发生了什么。您在一个部分中有 2 个测试。你有一个投掷测试。 let expected = expect(() => DateUtils.SimpleDate(2013, 13, 55)).to.throw('无效日期');然后你有一个 assert.equal(actual, expected);测试。你只需要第一个。尝试摆脱 'let expected = ' 和 'assert.equal(actual, expected);'期望应该已经在测试错误,我认为复制它不会起作用。此外 assert.equal 正在查看两者是否浅相等。我很确定 assert.equal 没有设置为捕获抛出的错误。
      • 当你抛出一个语句时,你需要捕获那个错误。带有一个 Catch 块。您不能将其存储在变量中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2019-06-28
      • 2016-02-12
      • 1970-01-01
      • 2020-06-19
      • 2016-08-04
      • 2021-02-14
      相关资源
      最近更新 更多