使用 tape/ES6 单元测试测试 AMD 模块?
Testing AMD modules with tape/ES6 unit tests?
我有一个网络应用程序使用:
- ES5
- RequireJS
- 下划线
- Backbone
- jQuery
我尝试使用以下方法设置新的单元测试套件:
- ES6
- 磁带
- Babel6
我的 AMD 模块 app/util/stringUtil.js:
define([], function() {
'use strict';
return {
isBlank: function(str) {
return _.isUndefined(str) || _.isNull(str) || _.isString(str) && str.trim().length === 0;
}
};
});
我在 tapeTest.js 中的单元测试:
import test from 'tape';
import sortUtil from 'app/util/stringUtil';
test('Testing stringUtil', (assert) => {
assert.ok(stringUtil.isBlank(' ')),
'Should be blank');
assert.end();
});
我的.babelrc:
{
"presets": ["es2015"]
}
我运行用胶带测试:
tape -r babel-register tapeTest.js
我收到以下错误:
app/util/stringUtil.js:1
(function (exports, require, module, __filename, __dirname) { define([], function () {
^
ReferenceError: define is not defined
at Object.<anonymous> (stringUtil.js:1:23)
at Module._compile (module.js:434:26)
at loader (node_modules/babel-register/lib/node.js:126:5)
at Object.require.extensions.(anonymous function) [as .js] (node_modules/babel-register/lib/node.js:136:7)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (tapeTest.js:7:17)
at Module._compile (module.js:434:26)
我猜磁带不能识别 AMD 模块?我能以某种方式解决这个问题吗?也许将 AMD 模块转换为 CommonJS 模块或其他什么?
我用 karma、webpack 和 phantomjs launcher 解决了这个问题:
- 业力
- karma-webpack
- karma-phantomjs-launcher
- 因果报应
- 磁带
Webpack 将 ES6 单元测试转换为 ES5 模块,karma 在 phantomjs 浏览器中启动并运行测试。
您可以使用 requirejs 在节点内加载 AMD 模块 :_)
阅读此处:http://requirejs.org/docs/node.html
你必须导入 require 并做一些配置,像这样:
'use strict';
const test = require('tape');
const requirejs = require('requirejs');
requirejs.config({
baseUrl: __dirname,
nodeRequire: require
});
test('Test something', function (assert) {
requirejs(['app/util/stringUtil'], function (stringUtil) {
assert.ok(stringUtil.isBlank(' '), 'Should be blank');
assert.end();
});
});
我有一个网络应用程序使用:
- ES5
- RequireJS
- 下划线
- Backbone
- jQuery
我尝试使用以下方法设置新的单元测试套件:
- ES6
- 磁带
- Babel6
我的 AMD 模块 app/util/stringUtil.js:
define([], function() {
'use strict';
return {
isBlank: function(str) {
return _.isUndefined(str) || _.isNull(str) || _.isString(str) && str.trim().length === 0;
}
};
});
我在 tapeTest.js 中的单元测试:
import test from 'tape';
import sortUtil from 'app/util/stringUtil';
test('Testing stringUtil', (assert) => {
assert.ok(stringUtil.isBlank(' ')),
'Should be blank');
assert.end();
});
我的.babelrc:
{
"presets": ["es2015"]
}
我运行用胶带测试:
tape -r babel-register tapeTest.js
我收到以下错误:
app/util/stringUtil.js:1
(function (exports, require, module, __filename, __dirname) { define([], function () {
^
ReferenceError: define is not defined
at Object.<anonymous> (stringUtil.js:1:23)
at Module._compile (module.js:434:26)
at loader (node_modules/babel-register/lib/node.js:126:5)
at Object.require.extensions.(anonymous function) [as .js] (node_modules/babel-register/lib/node.js:136:7)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (tapeTest.js:7:17)
at Module._compile (module.js:434:26)
我猜磁带不能识别 AMD 模块?我能以某种方式解决这个问题吗?也许将 AMD 模块转换为 CommonJS 模块或其他什么?
我用 karma、webpack 和 phantomjs launcher 解决了这个问题:
- 业力
- karma-webpack
- karma-phantomjs-launcher
- 因果报应
- 磁带
Webpack 将 ES6 单元测试转换为 ES5 模块,karma 在 phantomjs 浏览器中启动并运行测试。
您可以使用 requirejs 在节点内加载 AMD 模块 :_)
阅读此处:http://requirejs.org/docs/node.html
你必须导入 require 并做一些配置,像这样:
'use strict';
const test = require('tape');
const requirejs = require('requirejs');
requirejs.config({
baseUrl: __dirname,
nodeRequire: require
});
test('Test something', function (assert) {
requirejs(['app/util/stringUtil'], function (stringUtil) {
assert.ok(stringUtil.isBlank(' '), 'Should be blank');
assert.end();
});
});