在NodeJS中测试为浏览器编写的JavaScript
我有一些将在浏览器中运行的JavaScript,但我已经将与DOM无关的基于逻辑的函数分解为它们自己的js文件 如果可能的话,我更愿意通过命令行测试这些文件,为什么要打开浏览器来测试代码逻辑呢?在为Node.js挖掘了多个测试库之后。我想这没什么大不了的,但这似乎需要我构建一个完整的节点项目,这需要我提供一个main,它实际上并不存在于我的项目中,因为它只是从一个网页中触发的函数 是否有一种测试JavaScript函数的解决方案,它可以简单到只编写一个包含测试的.js文件,然后调用一个实用程序来运行这些测试?比设置一个跑步者、构建一个项目和管理依赖关系更简单的事情?感觉像是在Eclipse中编写和运行JUnit测试,而不是仅仅为了运行MVN测试而设置Maven项目在NodeJS中测试为浏览器编写的JavaScript,javascript,node.js,unit-testing,Javascript,Node.js,Unit Testing,我有一些将在浏览器中运行的JavaScript,但我已经将与DOM无关的基于逻辑的函数分解为它们自己的js文件 如果可能的话,我更愿意通过命令行测试这些文件,为什么要打开浏览器来测试代码逻辑呢?在为Node.js挖掘了多个测试库之后。我想这没什么大不了的,但这似乎需要我构建一个完整的节点项目,这需要我提供一个main,它实际上并不存在于我的项目中,因为它只是从一个网页中触发的函数 是否有一种测试JavaScript函数的解决方案,它可以简单到只编写一个包含测试的.js文件,然后调用一个实用程序来
作为后续问题,这是正确的方式吗?运行要在Node.js浏览器中运行的JavaScript测试正常吗?使用测试运行程序,如mocha或jasmine。非常容易设置并开始编写测试代码。例如,在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操作代码的内容。我将接受推荐摩卡的答案,并特别感谢您带领我走上了一条道路,最终让我以可以在浏览器和node.js中运行的格式编写js文件
我只是想在Ari的回答的基础上进一步阐述一些让生活更轻松的事情
npm安装-g mocha
在全球范围内安装了mocha。此外,我还创建了一个test
目录,将所有测试放在其中。通过这样做,我运行单元测试所要做的就是调用mochatest
。没有package.json,没有进入节点_模块的长路径来运行mochafoo.js
,内容如下:
function bar() {
console.log("Hi")
}
module.export = bar
然后在test
目录中,我有test\u foo.js
以及以下内容(注意,这个示例没有测试,请参见Ari的答案,以获取在Mocha中编写测试的示例):
使用这种方法,我可以使用
mochatest
在node中测试bar函数,并通过将其作为脚本导入到我的HTML页面中来使用它。node filename.js
我曾想过这一点,但据我所知,这只适用于独立文件,对吗?所以,如果我想在foo.js中测试函数栏,我不能在test_foo.js文件中执行var foo=require('./foo.js')。对吗?你可以,你只需要运行这个命令并提供代码入口点的名称这个命令是启动node.js应用程序的标准方法你从foo.js导出了什么吗?
var bar = require('../foo.js')
bar()