【问题标题】:AssertionError: Missing expected exception when testing async requirejs call using mochaAssertionError:使用 mocha 测试异步 requirejs 调用时缺少预期的异常
【发布时间】:2014-09-27 10:50:05
【问题描述】:

我正在为我的自定义 requirejs 加载器编写测试。如果输入格式错误,它应该会引发错误。

我正在使用mocha 和普通的node-assert 来测试它:

it('throws a SyntaxError on malformed input', function(done){
    assert.throws(function(){ requirejs(['myLoader!malformedInput'], Function.prototype) }, SyntaxError);
    done();
});

测试失败的原因是:

AssertionError: 缺少预期的异常 (SyntaxError)..

据我了解reading the docs on assert 我的语法应该没问题。错误信息也有点难以理解。

我最好的猜测是,这是因为 requirejs 调用是异步的,但我不知道在这种情况下何时调用 done

还是我误解了requirejs 将处理我传递给onload.error(e) 的错误的方式?

【问题讨论】:

  • 从节点 v10.0.0 开始,为 async 断言添加了assert.rejects

标签: testing requirejs mocha.js amd node-assert


【解决方案1】:

assert.throws 不适用于异步引发的异常。这是一个如何使用 RequireJS errback 完成的示例:

var assert = require("assert");
var requirejs = require("requirejs");

requirejs.config({
    baseUrl: ".",
});

it('throws a SyntaxError on malformed input', function (done){
    requirejs(['fail'], function (fail) {
        // This should not be called.
        throw new Error("We were expecting a failure but none occurred!");
    }, function (err) {
        assert(err.originalError instanceof SyntaxError,
               "We should get a SyntaxError.");
        done();
    });
});

fail.js 文件应包含无意义的代码(即生成 SyntaxError)。传递给requirejs 的第二个函数是加载失败时调用的 errback。

【讨论】:

  • 这正是我最终解决这个问题的方法,谢谢!
  • @Louis。谢谢,虽然我没有使用 RequireJS。想知道为什么测试模式因 async/await 而失败。看到这一点并且能够理解。这就是我使用异步/等待的方式。请让我知道在测试通过时是否正确执行? try { await user.save(); } catch(err) { assert.equal(err.errors.email.message, 'Invalid Email'); }
猜你喜欢
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 2015-08-09
  • 2011-07-31
  • 1970-01-01
  • 2016-08-03
  • 2019-02-26
  • 2012-08-22
相关资源
最近更新 更多