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

问题描述 投票:0回答:3

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

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

是否有一种测试 JavaScript 函数的解决方案,只需编写一个包含测试的 .js 文件并调用一个实用程序来运行这些测试?有比设置运行程序或构建项目并管理依赖项更简单的事情吗?感觉就像在 Eclipse 中编写和运行 JUnit 测试,而不像仅仅为了运行 MVN 测试而必须设置 Maven 项目?

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

javascript node.js unit-testing
3个回答
2
投票

使用摩卡或茉莉花等测试运行程序。非常容易设置并开始编写测试代码。例如,在 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
投票

我将接受 Ari Singh 推荐 Mocha 的答案,并特别感谢 Ayush Gupta 带领我走上一条最终让我以可以在浏览器和节点中运行的格式编写 js 文件的道路.js.

只是为了扩展阿里的回答,让生活变得更轻松一些。

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

在我的根目录中,我有

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 页面中使用它。


0
投票

有类似问题。

想要一种对基于浏览器的文件进行单元测试的方法,这样我就不必修改原始的 JavaScript。我解决这个问题的方法是将要测试的脚本包装在一个新函数中,提供一种从脚本中导出内容的方法(以便可以在单元测试中测试它们),以及一种向脚本提供一些内容(例如依赖项)的方法(否则会导致测试运行时抛出错误,例如 JQuery 或 DOM 对象等第 3 方库)。

代码位于 npm 包中并公开,因为这个问题被问了几次:

https://www.npmjs.com/package/@moikaturns/import-pob-code

因此,如果使用 Node,则可以导入包并与 Jest 或 Mocha 等测试平台一起使用,或者从 git 复制代码并适应特定需求。这只是几行。没什么复杂的。

© www.soinside.com 2019 - 2024. All rights reserved.