javascript - Sails.js:如何实际运行测试

标签 javascript node.js unit-testing sails.js mocha.js

我对 sails、node 和 js 完全陌生,所以我可能遗漏了一些明显的东西。

我正在使用 sails 0.10.5 和 Node 0.10.33。

在 sails.js 文档中有一个关于测试的页面 http://sailsjs.org/#/documentation/concepts/Testing ,但它没有告诉我如何实际运行它们。

我已经根据该文档设置了目录,添加了一个名为 test/unit/controllers/RoomController.test.js 的测试,现在我想让它运行。

没有“sails test”命令或类似的命令。我也没有找到任何关于如何添加任务的迹象,因此测试总是在“升 sails ”之前运行。

最佳答案

UPDATE-2: 在为以这种方式运行单元测试需要多少时间而苦苦挣扎之后,我决定创建一个模块来加载模型并将它们变成全局变量,就像 sails 一样,但没有服用那么多。即使你去掉每个钩子(Hook),但是 orm-loader 取决于机器,它可以很容易地花费几秒钟而不进行任何测试!,并且当你添加模型时它会变慢,所以我创建了这个名为 waterline-loader 的模块所以你可以加载只是基础(大约快 10 倍),模块不稳定,需要测试,但欢迎您使用它或修改它以满足您的需要,或者在这里帮助我改进它 -> https://github.com/Zaggen/waterline-loader


更新 1: 我已将与使用 mocha 运行测试相关的信息添加到 运行测试 部分下的 docs


只是为了扩展其他人所说的(特别是 Alberto Souza 所说的)。

您需要两个步骤才能使 mocha 随心所欲地与 sails 一起工作。首先,如 sails.js Docs 中所述,您需要在运行测试之前提升服务器,为此,您在您的测试 (test/bootstrap.test.js) 将首先由 mocha 调用,然后它会调用您的测试文件。

var Sails = require('sails'),
  sails;

before(function(done) {
  Sails.lift({
    // configuration for testing purposes
  }, function(err, server) {
    sails = server;
    if (err) return done(err);
    // here you can load fixtures, etc.
    done(err, sails);
  });
});

after(function(done) {
  // here you can clear fixtures, etc.
  sails.lower(done);
});

现在在你的 package.json 中,在 scripts 键上,添加这一行(忽略评论)

 // package.json ....
 scripts": {
    // Some config 
    "test": "mocha test/bootstrap.test.js test/**/*.test.js"
  },
 // More config

这将加载 bootstrap.test.js 文件,启动您的 sails 服务器,然后运行所有使用格式“testname.test.js”的测试,如果您愿意,可以将其更改为“.spec.js”更喜欢。

现在您可以使用 npm test 来运行您的测试。

请注意,您可以在不修改 package.json 并在命令行中键入 mocha test/bootstrap.test.js test/**/*.test.js 的情况下执行相同的操作

PST:有关 bootstrap.test.js 的更详细配置,请查看 Alberto Souza 的回答或直接查看 hist github 存储库中的 file

关于javascript - Sails.js:如何实际运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26837522/

相关文章:

ios - Xcode - 单元测试 : Test session exited(-1) without checking in

java - 用于单元测试的 Mock dao

javascript - 从旧的indexedDB setVersion 升级到新的indexedDB.open 函数?

javascript - js中重置计算器输入框以便下一步操作

javascript - 为什么当我刷新时数据库中只显示一项(Firebase)

node.js - 按顺序执行几个 "npm scripts"

javascript - 使用 Controller 作为语法的多个 angularjs 指令实例

node.js - FindOneAndUpdate 不更新带有传入参数的嵌套字段

javascript - Node js 在 foreach 中未定义?

javascript - 为什么我的 $q deferred 没有在 Angular 单元测试中解决?