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

时间:2018-02-15 03:52:14

标签: javascript node.js unit-testing

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

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

是否有测试JavaScript函数的解决方案,只需编写带有测试的.js文件并调用实用程序来运行这些测试就可以了?比设置跑步者,构建项目和管理依赖项更简单?感觉就像在Eclipse中编写和运行JUnit测试一样,有点像为了运行MVN测试而必须设置Maven项目?

作为一个后续问题,这是否是正确的方法呢?运行在Node.js中的浏览器中运行的JavaScript测试是否正常?

2 个答案:

答案 0 :(得分:0)

使用像摩卡或茉莉花这样的测试跑步者。非常容易设置并开始编写测试代码。例如,在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操作代码。

答案 1 :(得分:0)

我将接受Ari Singh's回答推荐Mocha,并特别感谢Ayush Gupta引导我走上一条道路,最终让我以可以运行的格式编写我的js文件浏览器和node.js。

只是为了扩展Ari对某些让生活变得更轻松的事情的回答。

  1. 我使用npm install -g mocha全局安装了mocha。另外,我创建了一个test目录,我将所有测试都放入其中。通过执行此操作,我只需要调用mocha test来运行单元测试。没有package.json,没有冗长的路径进入node_modules来运行mocha。
  2. 节点js要求您将函数导出到一个要在另一个文件中使用的文件中,而浏览器中的JavaScript则不会。为了支持Node.js和JavaScript,我做了以下几点:
  3. 在我的根目录中,我有foo.js,其中包含以下内容:

    function bar() {
        console.log("Hi")
    }
    
    module.export = bar
    

    然后在test目录中我有test_foo.js,其中包含以下内容(注意此示例没有测试,请参阅Ari的答案,以获取在Mocha中编写测试的示例):

    var bar = require('../foo.js')
    
    bar()
    

    使用这种方法,我可以使用mocha test在节点中测试条形函数,并通过将其作为脚本导入,仍在我的HTML页面中使用它。