RequireJS + Mocha + JSDom + Node -> Node 不支持 Shim 配置
RequireJS + Mocha + JSDom + Node -> Shim config not supported in Node
我正在尝试使用 JSDom 和 RequireJS 设置一个 Mocha 测试框架。因为我 运行 在节点上测试而不是使用浏览器(因为我使用的是 JSDom),所以所有非 AMD 模块似乎都没有被导入并且正在抛出 Shim config not supported in Node
。有谁知道我如何将这些模块导出到 AMD 或者正确的方法是什么? (也就是我做错了什么)
我的设置示例
Component.js
define(["jquery", "non_AMD_Module", ... ], function($, NonAMDModule, ...) {
let component = {
...
foo = () => {
NonAMDModule.bar();
};
};
return component;
});
Component.test.js
const requirejs = require('requirejs');
const { JSDOM } = require('jsdom');
requirejs.config({
baseUrl: "dist/app",
paths: {
jquery: "lib/jquery",
component: "path_to_component",
non_AMD_Module: "path_to_module"
},
shim: {
non_AMD_Module: { exports: "non_AMD_Module" } // This doesn't work
}
});
const { window } = new JSDOM("<html></html>");
global.window = window;
global.document = window.document;
global.$ = requirejs('jquery');
const Component = requireJS('component');
describe('test', () => {
it('is a simple test', () => {
const testComponent = new Component();
testComponent.foo();
}
});
当我 运行 测试套件时,我得到:
Mocha Exploded!
TypeError: Cannot read property 'bar' of undefined
运行ning r.js -convert "path_to_module"
不适用于此模块
查看 jQuery 的源代码,我发现有这个样板代码可以将其导出到 AMD。
这可以添加到非 AMD 模块的底部,以便将其导出到 RequireJS 可访问的 AMD 模块
if ( typeof define === "function" && define.amd ) {
define([], function {
return non_AMD_Module;
});
}
其他资源:
Shim a module in Require.js that uses module.exports possible?
https://github.com/requirejs/requirejs/wiki/Updating-existing-libraries#anon
我正在尝试使用 JSDom 和 RequireJS 设置一个 Mocha 测试框架。因为我 运行 在节点上测试而不是使用浏览器(因为我使用的是 JSDom),所以所有非 AMD 模块似乎都没有被导入并且正在抛出 Shim config not supported in Node
。有谁知道我如何将这些模块导出到 AMD 或者正确的方法是什么? (也就是我做错了什么)
我的设置示例
Component.js
define(["jquery", "non_AMD_Module", ... ], function($, NonAMDModule, ...) {
let component = {
...
foo = () => {
NonAMDModule.bar();
};
};
return component;
});
Component.test.js
const requirejs = require('requirejs');
const { JSDOM } = require('jsdom');
requirejs.config({
baseUrl: "dist/app",
paths: {
jquery: "lib/jquery",
component: "path_to_component",
non_AMD_Module: "path_to_module"
},
shim: {
non_AMD_Module: { exports: "non_AMD_Module" } // This doesn't work
}
});
const { window } = new JSDOM("<html></html>");
global.window = window;
global.document = window.document;
global.$ = requirejs('jquery');
const Component = requireJS('component');
describe('test', () => {
it('is a simple test', () => {
const testComponent = new Component();
testComponent.foo();
}
});
当我 运行 测试套件时,我得到:
Mocha Exploded!
TypeError: Cannot read property 'bar' of undefined
运行ning r.js -convert "path_to_module"
不适用于此模块
查看 jQuery 的源代码,我发现有这个样板代码可以将其导出到 AMD。
这可以添加到非 AMD 模块的底部,以便将其导出到 RequireJS 可访问的 AMD 模块
if ( typeof define === "function" && define.amd ) {
define([], function {
return non_AMD_Module;
});
}
其他资源:
Shim a module in Require.js that uses module.exports possible?
https://github.com/requirejs/requirejs/wiki/Updating-existing-libraries#anon