AssertionError:使用mocha测试async requirejs调用时缺少预期的异常

m90*_*m90 2 testing amd mocha.js requirejs node-assert

我正在为自定义requirejs加载器编写测试.在格式错误的输入上它应该抛出一个错误.

我正在使用mocha并简单node-assert地测试它:

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

测试失败的原因是:

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

根据我的理解,读取断言的文档我的语法应该没问题.错误消息也有点难以理解.

我最好的猜测是,这是因为requirejs呼叫是异步的,但后来我不知道何时呼叫done这种情况?

或者我误解了requirejs处理我传递的错误的方式onload.error(e)

Lou*_*uis 8

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();
    });
});
Run Code Online (Sandbox Code Playgroud)

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