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

标签 javascript node.js unit-testing

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

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

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

作为后续问题,这是否是正确的方法?在 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 这样的 headless 浏览器来测试包含 DOM 操作代码。

关于javascript - 在 Node JS 中测试为浏览器编写的 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48799717/

相关文章:

javascript - 使用 Javascript 解析 xml 文档

node.js - 使用代理的客户端的socket.io flash(和其他)回退的正确设置

javascript - 在 IntelliJ IDEA 中运行 Jest 测试

c# - 单元测试 COM 事件?

javascript - 如何在视口(viewport)之外自动停止 YouTube 视频?

javascript - 将项目添加到逗号分隔列表的自定义 Google 表格功能

javascript - MongoDB 在集合中查找最新日期

node.js - 在express-handlebars中包含布局问题

python - Azure VM 似乎会终止长时间运行的 MySql 查询

wpf - 单元测试附加行为 wpf