【问题标题】:requirejs mocha context errorrequirejs mocha上下文错误
【发布时间】:2014-03-29 01:03:27
【问题描述】:

我有一个简单的 mocha 测试在使用 requirejs 和 context 配置时失败。

这里是A.js

define([], function(){
    return {};
}); 

这是测试spec.js

var requirejs = require('requirejs');

var localReq = requirejs.config({
    baseUrl: "./",
    context: "context1"
})

describe("context test", function () {
    it("should not throw error", function () {
        for (var i = 0; i < 100; i++) {
            console.log(localReq("A"), i);
        }
    });
});    

当我运行测试 mocha spec.js 时,我收到以下错误:

未捕获的错误:尝试在 /Users/khirakawa/work/test/node_modules/mocha/bin/A.js 加载“A”,然后尝试节点的 require(“A”),但失败并出现错误:错误:找不到模块'A'

截图如下:

注意A 是如何正确加载并记录 100 次的,但测试仍然失败。如果我注释掉 context 配置,它就可以正常工作。

即使只有 1 个测试,Mocha 也会打印出“1 个通过”和“1 个失败”。

为什么会这样?

【问题讨论】:

    标签: javascript requirejs mocha.js


    【解决方案1】:

    你可以这样写你的测试:

    describe("context test", function () {
        it("should not throw error", function (done) {
            localReq(["A"], function (f) { done(); });
        });
    });
    

    正如您在评论中指出的那样,调用 localReq 以同步获取模块 should work 但由于某些无法解释的原因它没有。上面的代码调用localReq 异步加载模块,可以正常工作。

    Mocha 说您的单个测试通过和失败的原因是它检测到在您的测试结束后发生的错误,并且没有其他测试可以关联。同一个测试同时通过和失败的这种错误消息肯定表明您已经异步发生了一些事情,但是您没有在 Mocha 测试设置中处理它。

    【讨论】:

    • 谢谢路易斯!从浏览器的角度来看,您的解释是有道理的。我在 node-land 中不明白的是:1)requirejs 的文档声明“......在 Node 中运行时,将使用同步 IO 调用加载模块加载,并且加载器插件应该同步解析对其加载方法的调用。”它没有说需要首先加载模块。 2)如果我使用“_”的默认上下文,我的测试用例有效,并且 3)如果我将 A 中返回的内容更改为 {test:“test”},它将打印 {test:“test”} 100 次,提示它是同步加载的。
    • 你说得对,我对require("A") 失败原因的解释没有达到目标。但是,很明显 RequireJS 实际上 所做的与文档不一致。否则,您的代码将起作用。在这一点上,它对我来说似乎是一个错误。
    猜你喜欢
    • 2014-05-14
    • 2017-08-28
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多