与测试 angularjs 应用程序的业力相混淆

confused with karma for testing an angularjs application

我已经计划研究如何测试我的 AngularJS 应用程序 6 个多月了。不幸的是,因为我是唯一的前端开发人员,所以我被功能请求淹没了。我无法花时间进行单元测试。但是,我在这个敏捷冲刺期间告诉团队,我真的应该为单元测试添加代码。我能够申请 3 天专门用于学习单元测试。

其实我之前也做过研究。我找到了业力。我记得安装过。今天,我又安装了它。现在我很困惑。当我执行 unix find 时,这就是我得到的。

19:29 ~/repos/baam/baam-ui $ find ~/.npm -name 'karma*'

/Users/admin/.npm/chai/1.9.1/package/karma.conf.js
/Users/admin/.npm/chai/1.9.1/package/karma.sauce.js
/Users/admin/.npm/deep-eql/0.1.3/package/karma.conf.js
/Users/admin/.npm/karma
/Users/admin/.npm/karma/0.12.12/package/bin/karma
/Users/admin/.npm/karma/0.12.12/package/integration-tests/coffee/karma.conf.coffee
/Users/admin/.npm/karma/0.12.12/package/integration-tests/coverage-coffee/karma.conf.coffee
/Users/admin/.npm/karma/0.12.12/package/integration-tests/coverage-jasmine/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/coverage-mocha-requirejs/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/coverage-qunit/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/dojo/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/html2js/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/jasmine/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/jasmine_2/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/junit/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/live-script/karma.conf.ls
/Users/admin/.npm/karma/0.12.12/package/integration-tests/mocha/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/qunit/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/requirejs/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/integration-tests/saucelabs/karma.conf.js
/Users/admin/.npm/karma/0.12.12/package/karma-0.12.11.tgz
/Users/admin/.npm/karma/0.12.12/package/karma-completion.sh
/Users/admin/.npm/karma/0.12.12/package/lib/middleware/karma.js
/Users/admin/.npm/karma/0.12.12/package/static/karma.js
/Users/admin/.npm/karma/0.12.14/package/bin/karma
/Users/admin/.npm/karma/0.12.14/package/integration-tests/coffee/karma.conf.coffee
/Users/admin/.npm/karma/0.12.14/package/integration-tests/coverage-coffee/karma.conf.coffee
/Users/admin/.npm/karma/0.12.14/package/integration-tests/coverage-jasmine/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/coverage-mocha-requirejs/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/coverage-qunit/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/dojo/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/html2js/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/jasmine/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/jasmine_2/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/junit/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/live-script/karma.conf.ls
/Users/admin/.npm/karma/0.12.14/package/integration-tests/mocha/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/qunit/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/requirejs/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/integration-tests/saucelabs/karma.conf.js
/Users/admin/.npm/karma/0.12.14/package/karma-0.12.13.tgz
/Users/admin/.npm/karma/0.12.14/package/karma-completion.sh
/Users/admin/.npm/karma/0.12.14/package/lib/middleware/karma.js
/Users/admin/.npm/karma/0.12.14/package/static/karma.js
/Users/admin/.npm/karma/0.12.16/package/bin/karma
/Users/admin/.npm/karma/0.12.16/package/karma-completion.sh
/Users/admin/.npm/karma/0.12.16/package/lib/middleware/karma.js
/Users/admin/.npm/karma/0.12.16/package/static/karma.js
/Users/admin/.npm/karma-chai
/Users/admin/.npm/karma-chrome-launcher
/Users/admin/.npm/karma-coverage
/Users/admin/.npm/karma-firefox-launcher
/Users/admin/.npm/karma-jasmine
/Users/admin/.npm/karma-mocha
/Users/admin/.npm/karma-ng-html2js-preprocessor
/Users/admin/.npm/karma-ng-scenario
/Users/admin/.npm/karma-phantomjs-launcher
/Users/admin/.npm/karma-requirejs
/Users/admin/.npm/registry.npmjs.org/karma
/Users/admin/.npm/registry.npmjs.org/karma-chai
/Users/admin/.npm/registry.npmjs.org/karma-chrome-launcher
/Users/admin/.npm/registry.npmjs.org/karma-coverage
/Users/admin/.npm/registry.npmjs.org/karma-jasmine
/Users/admin/.npm/registry.npmjs.org/karma-mocha
/Users/admin/.npm/registry.npmjs.org/karma-ng-html2js-preprocessor
/Users/admin/.npm/registry.npmjs.org/karma-ng-scenario
/Users/admin/.npm/registry.npmjs.org/karma-phantomjs-launcher

看来我现在有多个版本了。我手动执行了 karma 二进制文件,得到了这个输出。

module.js:340
    throw err;
          ^
Error: Cannot find module 'optimist'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/admin/.npm/karma/0.12.14/package/lib/cli.js:2:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

我不记得以前听过哪些教程,所以我不确定我执行了哪些命令。我还在我的 Angular 项目中看到了 karma.conf.js。我不确定为什么我在那里有一个。文件日期为 2014 年 7 月 12 日。

我不确定如何在不影响我的项目的情况下重新启动我的 karma 安装。我想有一个干净和工作的业力。我也想学习如何测试我的应用程序。

哦,我记得我也看过量角器,但我不知道我是否安装了它。我想对 angular 使用最好的单元测试。到目前为止,我读到它是因果报应。

您在不同版本中看到的是 npm 缓存。 npm 将缓存它下载的所有软件包和所有版本,以便在再次需要它们时更快地安装它们。

您需要做的是将 karma 安装为开发依赖项 (npm install karma --save-dev) 以及您想要的所有 karma 'plugins'(以 karma- 开头的东西)在您想要使用它们的项目中使用。

Karma 只是一个测试运行器,你最终会用类似 mocha or jasmine 的方式编写你的测试。 Karma 基本上是启动一个服务器,启动一些浏览器(或者您可以手动连接)并运行您的测试文件。然后它获取结果并将它们输出到您选择的 'reporter'(如 console/terminal)。

还有chai and sinon that work well with mocha to allow for easier testing. There are usually karma plugins version for those, and even a karma-chai-sinon

之类的

Karma 使用 config file(通常命名为 karma.conf.js)来告诉它使用什么记者,使用什么测试框架,自动测试什么浏览器,什么文件可以通过它运行的服务器,以及其他东西。

您可以在上面添加一个任务运行程序(如 gulp with gulp-karma),这样您就可以构建您的项目,然后在一个命令中测试所有项目。

您还需要 ngMocks 来为 angular 编写测试。

Protractor 是 angular 团队制作的端到端测试器,用于 angular。