bad*_*tax 6 javascript node.js requirejs jasmine gruntjs
我正在尝试找出使用UMD工厂测试Javascript模块定义的最佳方法,类似于:https://github.com/umdjs/umd/blob/master/returnExportsGlobal.js
我不想测试模块本身,我想测试模块是否在各种环境中正确"导出/创建":
我想使用grunt和jasmine来运行这些测试.我可以使用grunt-contrib-jasmine来测试第2点和第3点,但不是第1点.
我想我可以使用grunt-contrib-jasmine和grunt-jasmine-node的混合来测试正确的模块定义(具体实现我还需要弄清楚),但感觉非常混乱.
在很高的层面上,有没有人知道任何现有的方法来实现这一点而不使用多个grunt插件?
最后,我决定采用混合任务,使用 grunt-contrib-jasmine 进行浏览器全局和浏览器 AMD 测试,使用 jasmine_node 进行 CommonJS 测试。我只有一个规范文件支持所有 3 个模块类型测试。
这是我的咕噜配置:
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
jasmine: {
browserGlobal: {
src: ['src/Foo.js'],
options: {
specs: 'spec/**/*.spec.js'
}
},
browserAMD: {
src: ['src/Foo.js'],
options: {
specs: 'spec/**/*.spec.js',
template: require('grunt-template-jasmine-requirejs')
}
}
},
jasmine_node: {
specNameMatcher: 'spec',
projectRoot: 'spec/'
}
});
Run Code Online (Sandbox Code Playgroud)
我的 jasmine 规范文件现在支持 UMD:
(function (root, factory) {
if (typeof module === 'object' && module.exports) {
// Node/CommonJS
factory(
require('modulename')
);
} else if (typeof define === 'function' && define.amd) {
// AMD
define([
'modulename'
], factory);
} else {
// Browser globals
factory(root.ModuleName);
}
}(this, function factory(ModuleName) {
// Tests here
}));
Run Code Online (Sandbox Code Playgroud)
这是我用于模块的 UMD 工厂:
(function (root, factory) {
if (typeof module === 'object' && module.exports) {
// Node/CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory);
} else {
// Browser globals
root.ModuleName = factory();
}
}(this, function factory() {
// public API
return {
foo: 'bar'
};
}));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3281 次 |
最近记录: |