使用磁带/ES6 单元测试测试 AMD 模块



我有一个使用以下内容的网络应用程序:

  • ES5
  • 要求 JS
  • 强调
  • 骨干
  • jQuery

我尝试使用以下方法设置新的单元测试套件:

  • ES6
  • 磁带
  • 通天塔6

My AMD module app/util/stringUtil.js:

define([], function() {
    'use strict';
    return {
        isBlank: function(str) {
            return _.isUndefined(str) || _.isNull(str) || _.isString(str) && str.trim().length === 0;
        }
    };
});

我在磁带测试中的单元测试.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模块或其他东西?

您可以使用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();
    });
});

我通过使用业力,webpack和phantomjs启动器解决了它:

  • 业力网络包
  • Karma-phantomjs-launcher
  • 业力水龙头
  • 磁带

Webpack 将 ES6 单元测试转换为 ES5 模块,karma 启动并在 phantomjs 浏览器中运行测试。

相关内容

  • 没有找到相关文章

最新更新