如何使用 Karma (testacular) 测试 nodejs 后端代码

Posted

技术标签:

【中文标题】如何使用 Karma (testacular) 测试 nodejs 后端代码【英文标题】:How to test nodejs backend code with Karma (testacular) 【发布时间】:2013-05-15 16:03:45 【问题描述】:

如何设置 Karma 来运行我的后端单元测试(用 Mocha 编写)?如果我将我的后端测试脚本添加到 files = [],它会失败,说明 require 未定义。

【问题讨论】:

这个可以完成,看看我的项目:github.com/noamtcohen/Narma 【参考方案1】:

你没有。 Karma 仅用于测试基于浏览器的代码。如果您的项目在后端有 mocha 测试,在前端有 karma/mocha,请尝试在脚本下编辑 package.json 以将 test 设置为:mocha -R spec && karma run karma.con

然后,如果 npm test 返回 true,您将知道提交或部署是安全的。

【讨论】:

谢谢!我找到了一个使用 Grunt 的解决方案,我已经计划在我的项目中进行设置。请参阅我自己的答案。 基本上所有 JS 的测试运行器都依赖浏览器呢?那没用。 Mocha 和 Jasmine 不依赖浏览器,当你想在无头浏览器上运行时,可以考虑使用 phantomjs。 请注意,依赖浏览器进行测试并不是什么坏事。有不同类型的测试,端到端测试是有效的,具体取决于您的需求。在某些情况下,甚至测试视觉回归(参见 facebook 的 huxley)也很重要。【参考方案2】:

似乎无法完成(感谢@dankohn)。这是我使用 Grunt 的解决方案:

Karma:更新你的 karma.conf.js 文件

设置autoWatch = false; 设置singleRun = true; 设置browsers = ['PhantomJS'];(以获得内联结果)

咕噜声:

npm install grunt-contrib-watch grunt-simple-mocha grunt-karma 配置两个 grunt 任务(参见下面的 grunt 文件)

Gruntfile.js:

module.exports = function (grunt) 
  grunt.loadNpmTasks('grunt-simple-mocha');
  grunt.loadNpmTasks('grunt-karma');

  grunt.initConfig(
    simplemocha: 
      backend: 
        src: 'test/server-tests.js'
      
    ,
    karma: 
      unit: 
        configFile: 'karma.conf.js'
      
    
  );

  // Default task.
  grunt.registerTask('default', ['simplemocha', 'karma']);
;

Grunt(可选):配置 grunt-watch 以在更改规范文件或要测试的文件后运行。

使用grunt命令全部运行。

【讨论】:

所以你还是需要一个浏览器,只是浏览器是无头的。多么没用,绝对不使用 karma 进行服务器端测试。 嗨,这不是使用 karma 作为后端,这是使用 mocha,所以没有浏览器。这只是在您保存文件后立即运行所有测试的便捷方式。 虽然我的工作并不真正需要 Karma,但这确实让我走上了一条简单的道路,让我可以通过 grunt setup 自动运行我的 mocha 测试,非常感谢。 有趣的方法。但是如何确保 Sails 全局变量在您的测试中被正确识别?

以上是关于如何使用 Karma (testacular) 测试 nodejs 后端代码的主要内容,如果未能解决你的问题,请参考以下文章

在 Jasmine 单元测试中模拟 AngularJS 模块依赖项

Karma Webpack 源图不起作用

.Karma+Jasmine+karma-coverage

单测方法论---1

如何使用 Karma 和 React 16.2.0 修复此错误?

如何安装和使用Karma-Jasmine