资讯专栏INFORMATION COLUMN

[译]使用karma进行angular测试

Tony / 2122人阅读

摘要:前面我们写过了的一篇文章开始对进行单元测试而提供了非常有用的工具去帮助我们进行的测试。接下来,会增加一些内容写测试用例接下来我们可以开始进行测试了,我们在命令行工具里输入下面的命令我们将下面的代码粘贴到中去。

紧随前文如何对Angular Controller进行单元测试,
但是我们也提到了前文工作流程的不方便,简单总结上前文进行测试的一个流程:

修改测试代码;

刷新浏览器;

查看测试结果;

该方法最大的缺陷就是,我们每次都得手动的去刷新我们的浏览器。但是如果我们需要测试不同的浏览器我们又应该如何处理呢?
而本文将提出一个自动化测试的方案,从而解决这些问题。

关于Karma

Karma是一个由AngularJS 团队创造的JavaScript测试工具。前面我们写过了Jasmine的一篇文章《开始对Angular App进行单元测试》
而Karma提供了非常有用的工具去帮助我们进行Jasmine的测试。

安装 Karma

你在这里可以看到更为详细的安装
文章,而本文随后也会概括总结一些。首先你得安装node.js,如果安装了则跳过,没有安装的可以看这里

注意官方文档中有说明,Karma在某些版本的node工作不那么友好。然而作者本身的v0.12.x并没遇见什么问题。打开你的命令行软件,我们输入下面命令,

mkdir CalculatorKarma
cd CalculatorKarma
echo {} >> package.json bash

接下来我么用npm安装karma

npm install karma --save-dev

如果安装成功, package.json中将会有下面内容:

{
  "devDependencies": {
    "karma": "^0.12.31"
  }
}

接着我们最好安装下karma-cli,这样可以全局使用karma命令。

npm install -g karma-cli

下一步我们需要安装一些karma的插件,这样可以Jasmine测试框架能够工作,并且设置Google Chrome 作为我们的测试浏览器。

npm install karma-jasmine karma-chrome-launcher --save-dev

接下来,package.json会增加一些内容:

{
  "devDependencies": {
    "jasmine-core": "^2.3.4",
    "karma": "^0.12.31",
    "karma-chrome-launcher": "^0.1.12",
    "karma-jasmine": "^0.3.5"
  }
}
写测试用例

接下来我们可以开始进行测试了,我们在命令行工具里输入下面的命令:

mkdir tests
touch tests/calculator.controller.test.js

我们将下面的代码粘贴到calculator.controller.test.js中去。

describe("calculator", function () {

  beforeEach(module("calculatorApp"));

  var $controller;

  beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
  }));

  describe("sum", function () {
        it("1 + 1 should equal 2", function () {
            var $scope = {};
            var controller = $controller("CalculatorController", { $scope: $scope });
            $scope.x = 1;
            $scope.y = 2;
            $scope.sum();
            expect($scope.z).toBe(3);
        });    
    });

});
让测试跑起来

在进行测试之前,我们创建一个配置文件用于进行karma的一些设置。关于配置的内容您可以阅读 官方文档。

接下来我们开始创建这个配置文件我们需要输入下面的内容:

karma init karma.conf.js

然后回答命令行的问题就行了

Which testing framework do you want to use?(你所使用的测试框架?)

接受一个默认的值,比如:jasmine

Do you want to use Require.js ?(你希望使用 Require.js吗?)
接受一个默认的值,比如:no

Do you want to capture any browsers automatically ?(你想自动捕获浏览器吗?)

接受一个默认的值 比如:chrome

What is the location of your source and test files ?(你测试文件的地址)

输入下面的地址:

tests/*.test.js

当然你并不需要担心你跳过那些询问,稍后我们都可以手动修改配置文件。

Should any of the files included by the previous patterns be excluded ?(是否有需要排除的符合前面格式的问文件)

Do you want Karma to watch all the files and run the tests on change ?(是否动态监听文件变化)

接受一个默认的值,比如:yes

接下来我们可以在根目录看到配置文件karma.conf.js创建成功。

我们输入下面的命令开始测试

karma start karma.conf.js

测试后的输出就像下面这样:

> @ test /Users/devuser/repos/CalculatorKarma
> ./node_modules/karma/bin/karma start karma.conf.js

INFO [karma]: Karma v0.12.31 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 42.0.2311 (Mac OS X 10.10.3)]: Connected on socket 2absOkNfa1asasaX0fCJ with id 71338229
Chrome 42.0.2311 (Mac OS X 10.10.3) calculator encountered a declaration exception FAILED
    ReferenceError: module is not defined
        at Suite. (/Users/devuser/repos/CalculatorKarma/tests/calculator.controller.test.js:3:13)
        at /Users/devuser/repos/CalculatorKarma/tests/calculator.controller.test.js:1:1
Chrome 42.0.2311 (Mac OS X 10.10.3): Executed 1 of 1 (1 FAILED) ERROR (0.01 secs / 0.005 secs)

按住ctrl/command+c就可以停止这个进程。

小提示: 我们可以在package.json中的scripts里加入测试的命令,方便实用

{
    "scripts": {
    "test": "karma start karma.conf.js"
  },
  "devDependencies": {
    "jasmine-core": "^2.3.4",
    "karma": "^0.12.31",
    "karma-chrome-launcher": "^0.1.12",
    "karma-jasmine": "^0.3.5"
  }
}

加入这段代码后,我们可以输入npm test进行karma的测试了。如果我们要验证package.json是否修改正确。

通过测试并添加新功能

接下来我们添加一些controller的逻辑进去.

mkdir app
touch app/calculator.controller.js

然后我们需要下载angular的类库文件和angular mock的文件。

mkdir lib
curl -o lib/angular.min.js https://code.angularjs.org/1.4.0-rc.2/angular.min.js
curl -o lib/angular-mocks.js https://code.angularjs.org/1.4.0-rc.2/angular-mocks.js

我们需要将新增的目录加入到配置中去,打开 karma.conf.js 然后添加成下面内容:

// list of files / patterns to load in the browser
files: [
  "lib/angular.min.js",
  "lib/angular-mocks.js",
  "app/*.js",
  "tests/*.js"
],

再次在命令行中输入命令:

npm test

运行结果依旧是失败的,因为我们并没有添加我们的controller,接下来我们将下面的代码粘贴到 app/calculator.controller.js

angular.module("calculatorApp", []).controller("CalculatorController", function CalculatorController($scope) {
  $scope.sum = function() {
    $scope.z = $scope.x + $scope.y;
  };
});

在命令行工具里面我们可以看到karma检测到了文件变化,重新进行测试,这个时候测试就会通过了。

接下来我们添加一个新的测试用例,我们将它增加到calculator.controller.test.js中去,把它放到describe作用域内。

it("z should have default value of zero", function () {
    var $scope = {};
    var controller = $controller("CalculatorController", { $scope: $scope });
    expect($scope.z).toBe(0);
});

命令行这个时候会输出测试不通过,这个时候我们需要更新我们的controller代码

angular.module("calculatorApp", []).controller("CalculatorController", function CalculatorController($scope) {
  $scope.z = 0;
  $scope.sum = function() {
    $scope.z = $scope.x + $scope.y;
  };
});

测试通过的输出如下:

更多

原文作者写过一篇文章更为详细的介绍Karam,大家可以去深入的了解karma的使用。

karma支持不同的浏览器,我们可以在测试的时候设置这些浏览器:

chrome

safari

firefox

IE

除此之外,karma还有很多可供使用的插件,你可以在这里搜索到他们:https://www.npmjs.com/package/karma-ie-launcher

项目代码

原文地址: http://www.bradoncode.com/blog/2015/05/19/karma-angularjs-testing/

@ Bradley Braithwaite

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79629.html

相关文章

  • Angular单元测试系列-简介

    摘要:单元测试我们可以将其分成两类独立单独测试与测试工具集。工具集还有更多,这一切我们将在单元测试组件与指令单元测试逐一说明。那么下一篇,我们将介绍如何使用进行单元测试。 本文将探讨如何搭建测试环境、以及Angular测试工具集。 测试环境 绝大部分都是利用Angular Cli来创建项目,因此,默认已经集成我们所需要的npm包与脚本;当然,如果你是使用自建或官网 quickstart 的话...

    CNZPH 评论0 收藏0
  • Angular-mock之使用$httpBackend服务测试$http

    摘要:简介模块为单元测试提供模块定义加载注入等支持。为使用了的应用提供单元测试的伪后台。根据提示进行设置即可。将该文件保存为,测试时需按顺序将测试项目文件及依赖文件引入。最后在请求后执行就会立即执行完成请求。参考官方单元测试学习笔记 Angular-mock简介 Angular-mock模块为angular单元测试提供模块定义、加载、注入等支持。辅助Karma、Jasmine等JS测试工具来...

    rockswang 评论0 收藏0
  • Angular 4 简单入门笔记

    摘要:首先,我们需要在入口页面的中配置根路径然后创建一个路由模块路由配置在主模块中导入配置好的路由模块而在页面中需要一个容器去承载上面代码中的定义了用户点击后的路由跳转,定义该路由激活时的样式类。 刚实习的时候用过AngularJS,那时候真的是连原生JavaScript都不会写,依样画葫芦做了几个管理后台。然后突然换项目了,AngularJS就不写了,感觉前前后后接触了一年多的Angula...

    whlong 评论0 收藏0
  • 你的第一个AngularJS应用--教程二:基架、建立和测试的工具

    摘要:包括脚手架依赖管理准备测试包括单元测试和端到端测试。我们用来开发的工具有。是一个工具集,包含个核心组件,,和脚手架工具。当你正在做自己的一个项目时,使用哪些模块将取决于你自己。这个目录当然是测试文件。 介绍 有很多可用的工具可以帮助你开发AngularJS 应用,那些非常复杂的框架不在我的讨论范围之中,这也是我开始这系列教程的原因。 在第一部分,我们掌握了AngularJS框架的基本...

    k00baa 评论0 收藏0
  • angular 1.x多项目共享子项目实践之路

    摘要:可发布这一部分会在下一章管理对子项目引用中详细说明。总结本文总结了多项目共享子项目工程化方面的一些实践,并不涉及到复杂的代码,主要涉及到的概念,使用进行包管理,使用作为自动化工具等工程化的知识。 背景 公司的产品线涵盖多个产品,这些产品中会有一些相同的功能,如登录,认证等,为了保持这些功能在各个产品中的一致性,我们在各个产品中维护一份相同的代码。这带来了很大的不便:当出现新的需求时,不...

    mist14 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<