测试用 browserify 打包的模块?

Posted

技术标签:

【中文标题】测试用 browserify 打包的模块?【英文标题】:Testing modules packaged with browserify? 【发布时间】:2015-11-20 08:08:20 【问题描述】:

我正在为一个使用 browserify 管理的模块编写测试。这是我要测试的模块(特别是我要测试calculateData):

require('mapbox.js');
var utils = require('./src/chart_utils');

var dashboard = 
    calculateData: function(data) 
        // functions to test
    
;

我已经开始写这样的测试了:

var expect = require('chai').expect;
var Dashboard = require('../dashboard');

// describe('Dashboard', function () 
//     describe('#convertData', function () 
//         it('should calculate the x and y value', function () 
//             var combinedData = [];
//             var data = Dashboard.convertData(combinedData);
//             expect(data.length).to.equal(2); // etc
//         );
//     );
// );

但即使是前两行也给我一个错误:

node_modules/mapbox.js/node_modules/leaflet/dist/leaflet-src.js:513
    ua = navigator.userAgent.toLowerCase(),
         ^
ReferenceError: navigator is not defined

它看起来好像正在测试所有包含的模块文件,并发现了一个错误。

有没有办法解决这个问题,只测试dashboard 中的功能?

【问题讨论】:

你试过了吗? npmjs.com/package/browserify-mockify 一个简单的问题:测试代码是在浏览器中执行还是在 Node 中执行?看起来它是 NodeJS 并且找不到 navigator 对象(默认附加到全局 window 之一。 【参考方案1】:

您是否在 browserify 配置中指定(“nodejs”兼容模式)?此行为可能来自您不需要的客户端 polyfill。 此外,browserfify 将遵循所有“require”指令,如果您要测试的功能不需要模块,则不需要它。

【讨论】:

【参考方案2】:

你需要 Dashboard 来测试,而 Dashboard 需要 mapbox.js,所以没有 mapbox.js 测试没有意义。您收到错误是因为节点中不存在导航器并且它无法执行代码 - 引用导航器时它会中断。我建议您设置Karma 进行测试运行。它可以在一个浏览器(或多个浏览器)中加载您的源文件和测试文件并在那里运行您的测试。

【讨论】:

以上是关于测试用 browserify 打包的模块?的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器端用es6,babel+browserify打包

Browserify使用指南(转)

Browserify模块化使用教程

Browserify & ReactJS 问题

让browserify接收命令行参数,在打包时parse yml配置文件

webpack 怎么build