gpt4 book ai didi

javascript - UMD 的 Grunt 测试

转载 作者:数据小太阳 更新时间:2023-10-29 05:26:34 24 4
gpt4 key购买 nike

我正在尝试找出使用 UMD 工厂测试 Javascript 模块定义的最佳方法,类似于:https://github.com/umdjs/umd/blob/master/returnExportsGlobal.js

我不想测试模块本身,我想测试模块在各种环境中是否正确“导出/创建”:

  1. 如果是 CommonJS( Node ),模块导出是否正确?
  2. 如果是 AMD,它的定义是否正确?
  3. 如果是浏览器(没有 requirejs),是否创建了正确的全局?

我想使用 grunt 和 jasmine 运行这些测试。我可以使用 grunt-contrib-jasmine 来测试第 2 点和第 3 点,但不能测试第 1 点。

我想我可以使用 grunt-contrib-jasmine 和 grunt-jasmine-node 的混合物来测试正确的模块定义(具体实现我仍然需要弄清楚),但感觉非常困惑。

在高层次上,有没有人知道任何现有的方法可以在不使用多个 grunt 插件的情况下实现这一目标?

最佳答案

最后,我决定执行混合任务,使用 grunt-contrib-jasmine 进行浏览器全局和浏览器 AMD 测试,使用 jasmine_node 进行 CommonJS 测试。我只有一个规范支持所有 3 个模块类型测试的文件。

这是我的 grunt 配置:

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/'
}
});

我的 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
}));

这是我用于我的模块的 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'
};
}));

关于javascript - UMD 的 Grunt 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com