在NodeJS中测试为浏览器编写的JavaScript

在NodeJS中测试为浏览器编写的JavaScript,javascript,node.js,unit-testing,Javascript,Node.js,Unit Testing,我有一些将在浏览器中运行的JavaScript,但我已经将与DOM无关的基于逻辑的函数分解为它们自己的js文件 如果可能的话,我更愿意通过命令行测试这些文件,为什么要打开浏览器来测试代码逻辑呢?在为Node.js挖掘了多个测试库之后。我想这没什么大不了的,但这似乎需要我构建一个完整的节点项目,这需要我提供一个main,它实际上并不存在于我的项目中,因为它只是从一个网页中触发的函数 是否有一种测试JavaScript函数的解决方案,它可以简单到只编写一个包含测试的.js文件,然后调用一个实用程序来

我有一些将在浏览器中运行的JavaScript,但我已经将与DOM无关的基于逻辑的函数分解为它们自己的js文件

如果可能的话,我更愿意通过命令行测试这些文件,为什么要打开浏览器来测试代码逻辑呢?在为Node.js挖掘了多个测试库之后。我想这没什么大不了的,但这似乎需要我构建一个完整的节点项目,这需要我提供一个main,它实际上并不存在于我的项目中,因为它只是从一个网页中触发的函数

是否有一种测试JavaScript函数的解决方案,它可以简单到只编写一个包含测试的.js文件,然后调用一个实用程序来运行这些测试?比设置一个跑步者、构建一个项目和管理依赖关系更简单的事情?感觉像是在Eclipse中编写和运行JUnit测试,而不是仅仅为了运行MVN测试而设置Maven项目


作为后续问题,这是正确的方式吗?运行要在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,没有进入节点_模块的长路径来运行mocha
  • Node js要求您导出一个文件中的函数,您希望在另一个文件中使用这些函数,而浏览器中的JavaScript则不这样做。为了同时支持Node.js和JavaScript,我做了以下工作:
  • 在我的根目录中,我有
    foo.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()