簡體   English   中英

使用磁帶/ES6 單元測試測試 AMD 模塊?

[英]Testing AMD modules with tape/ES6 unit tests?

我有一個網絡應用程序使用:

  • ES5
  • 需要JS
  • 下划線
  • 骨干
  • jQuery

我嘗試使用以下方法設置新的單元測試套件:

  • ES6
  • 膠帶
  • 通天塔6

我的 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 模塊或其他什么?

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

我通過使用 karma、webpack 和 phantomjs 啟動器解決了它:

  • 業力
  • 業力網絡包
  • karma-phantomjs-launcher
  • 因果報應
  • 膠帶

Webpack 將 ES6 單元測試轉換為 ES5 模塊,並且 karma 在 phantomjs 瀏覽器中啟動和運行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM