测试用 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 打包的模块?的主要内容,如果未能解决你的问题,请参考以下文章