我有一些要在浏览器中运行的 JavaScript,但我已经将与 DOM 无关的基于逻辑的函数分解到了自己的 js 文件中。
如果可以的话,我更愿意通过命令行测试这些文件,为什么必须打开浏览器来测试代码逻辑?在深入研究 Node.js 的多个测试库之后。我认为这不是什么大问题,但这似乎要求我构建一个整个节点项目,这要求我提供一个 main,它实际上并不存在于我的项目中,因为它只是从网页触发的函数。
是否有一种测试 JavaScript 函数的解决方案,只需编写一个包含测试的 .js 文件并调用一个实用程序来运行这些测试?有比设置运行程序或构建项目并管理依赖项更简单的事情吗?感觉就像在 Eclipse 中编写和运行 JUnit 测试,而不像仅仅为了运行 MVN 测试而必须设置 Maven 项目?
作为一个后续问题,这是否是正确的解决方法?在 Node.js 的浏览器中运行 JavaScript 测试是否正常?
使用摩卡或茉莉花等测试运行程序。非常容易设置并开始编写测试代码。例如,在 mocha 中,您可以编写简单的测试用例,例如
var assert = require('assert');
var helper = require('../src/scripts/modules/helper.js');
var model = require('../src/scripts/modules/model.js');
model.first.setMenuItem ({
'title': 'Veggie Burger',
'count': 257,
'id': 1
});
describe('increment', function(){
console.log ("Count : " + model.first.getMenuItem().count);
it('should increment the menu item', function(){
helper.increment();
assert.equal(model.first.getMenuItem().count, 258);
});
});
然后像
一样运行它们$ ./node_modules/mocha/bin/mocha test/*.js
其中 test/*.js 是规范文件(单元测试文件,如上面的文件)
输出将类似于:
Count : 257
increment
✓ should increment the menu item
1 passing (5ms)
您甚至可以使用 PhantomJS 等无头浏览器来测试包含 DOM 操作代码。
我将接受 Ari Singh 推荐 Mocha 的答案,并特别感谢 Ayush Gupta 带领我走上一条最终让我以可以在浏览器和节点中运行的格式编写 js 文件的道路.js.
只是为了扩展阿里的回答,让生活变得更轻松一些。
npm install -g mocha
全局安装了 mocha。此外,我创建了一个 test
目录,将所有测试放入其中。通过这样做,运行单元测试所需要做的就是调用 mocha test
。没有 package.json,没有进入 node_modules 的冗长路径来运行 mocha。在我的根目录中,我有
foo.js
,其中包含以下内容:
function bar() {
console.log("Hi")
}
module.export = bar
然后在
test
目录中,我有 test_foo.js
,其中包含以下内容(请注意,此示例没有测试,请参阅 Ari 的回答以获取在 Mocha 中编写测试的示例):
var bar = require('../foo.js')
bar()
使用这种方法,我可以使用
mocha test
测试节点中的 bar 函数,并且仍然通过将其作为脚本导入来在我的 HTML 页面中使用它。
有类似问题。
想要一种对基于浏览器的文件进行单元测试的方法,这样我就不必修改原始的 JavaScript。我解决这个问题的方法是将要测试的脚本包装在一个新函数中,提供一种从脚本中导出内容的方法(以便可以在单元测试中测试它们),以及一种向脚本提供一些内容(例如依赖项)的方法(否则会导致测试运行时抛出错误,例如 JQuery 或 DOM 对象等第 3 方库)。
代码位于 npm 包中并公开,因为这个问题被问了几次:
https://www.npmjs.com/package/@moikaturns/import-pob-code
因此,如果使用 Node,则可以导入包并与 Jest 或 Mocha 等测试平台一起使用,或者从 git 复制代码并适应特定需求。这只是几行。没什么复杂的。