成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[譯]使用karma進(jìn)行angular測(cè)試

Tony / 2133人閱讀

摘要:前面我們寫(xiě)過(guò)了的一篇文章開(kāi)始對(duì)進(jìn)行單元測(cè)試而提供了非常有用的工具去幫助我們進(jìn)行的測(cè)試。接下來(lái),會(huì)增加一些內(nèi)容寫(xiě)測(cè)試用例接下來(lái)我們可以開(kāi)始進(jìn)行測(cè)試了,我們?cè)诿钚泄ぞ呃镙斎胂旅娴拿钗覀儗⑾旅娴拇a粘貼到中去。

緊隨前文如何對(duì)Angular Controller進(jìn)行單元測(cè)試,
但是我們也提到了前文工作流程的不方便,簡(jiǎn)單總結(jié)上前文進(jìn)行測(cè)試的一個(gè)流程:

修改測(cè)試代碼;

刷新瀏覽器;

查看測(cè)試結(jié)果;

該方法最大的缺陷就是,我們每次都得手動(dòng)的去刷新我們的瀏覽器。但是如果我們需要測(cè)試不同的瀏覽器我們又應(yīng)該如何處理呢?
而本文將提出一個(gè)自動(dòng)化測(cè)試的方案,從而解決這些問(wèn)題。

關(guān)于Karma

Karma是一個(gè)由AngularJS 團(tuán)隊(duì)創(chuàng)造的JavaScript測(cè)試工具。前面我們寫(xiě)過(guò)了Jasmine的一篇文章《開(kāi)始對(duì)Angular App進(jìn)行單元測(cè)試》
而Karma提供了非常有用的工具去幫助我們進(jìn)行Jasmine的測(cè)試。

安裝 Karma

你在這里可以看到更為詳細(xì)的安裝
文章,而本文隨后也會(huì)概括總結(jié)一些。首先你得安裝node.js,如果安裝了則跳過(guò),沒(méi)有安裝的可以看這里

注意官方文檔中有說(shuō)明,Karma在某些版本的node工作不那么友好。然而作者本身的v0.12.x并沒(méi)遇見(jiàn)什么問(wèn)題。打開(kāi)你的命令行軟件,我們輸入下面命令,

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

接下來(lái)我么用npm安裝karma

npm install karma --save-dev

如果安裝成功, package.json中將會(huì)有下面內(nèi)容:

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

接著我們最好安裝下karma-cli,這樣可以全局使用karma命令。

npm install -g karma-cli

下一步我們需要安裝一些karma的插件,這樣可以Jasmine測(cè)試框架能夠工作,并且設(shè)置Google Chrome 作為我們的測(cè)試瀏覽器。

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

接下來(lái),package.json會(huì)增加一些內(nèi)容:

{
  "devDependencies": {
    "jasmine-core": "^2.3.4",
    "karma": "^0.12.31",
    "karma-chrome-launcher": "^0.1.12",
    "karma-jasmine": "^0.3.5"
  }
}
寫(xiě)測(cè)試用例

接下來(lái)我們可以開(kāi)始進(jìn)行測(cè)試了,我們?cè)诿钚泄ぞ呃镙斎胂旅娴拿?

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);
        });    
    });

});
讓測(cè)試跑起來(lái)

在進(jìn)行測(cè)試之前,我們創(chuàng)建一個(gè)配置文件用于進(jìn)行karma的一些設(shè)置。關(guān)于配置的內(nèi)容您可以閱讀 官方文檔。

接下來(lái)我們開(kāi)始創(chuàng)建這個(gè)配置文件我們需要輸入下面的內(nèi)容:

karma init karma.conf.js

然后回答命令行的問(wèn)題就行了

Which testing framework do you want to use?(你所使用的測(cè)試框架?)

接受一個(gè)默認(rèn)的值,比如:jasmine

Do you want to use Require.js ?(你希望使用 Require.js嗎?)
接受一個(gè)默認(rèn)的值,比如:no

Do you want to capture any browsers automatically ?(你想自動(dòng)捕獲瀏覽器嗎?)

接受一個(gè)默認(rèn)的值 比如:chrome

What is the location of your source and test files ?(你測(cè)試文件的地址)

輸入下面的地址:

tests/*.test.js

當(dāng)然你并不需要擔(dān)心你跳過(guò)那些詢問(wèn),稍后我們都可以手動(dòng)修改配置文件。

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

Do you want Karma to watch all the files and run the tests on change ?(是否動(dòng)態(tài)監(jiān)聽(tīng)文件變化)

接受一個(gè)默認(rèn)的值,比如:yes

接下來(lái)我們可以在根目錄看到配置文件karma.conf.js創(chuàng)建成功。

我們輸入下面的命令開(kāi)始測(cè)試

karma start karma.conf.js

測(cè)試后的輸出就像下面這樣:

> @ 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就可以停止這個(gè)進(jìn)程。

小提示: 我們可以在package.json中的scripts里加入測(cè)試的命令,方便實(shí)用

{
    "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進(jìn)行karma的測(cè)試了。如果我們要驗(yàn)證package.json是否修改正確。

通過(guò)測(cè)試并添加新功能

接下來(lái)我們添加一些controller的邏輯進(jìn)去.

mkdir app
touch app/calculator.controller.js

然后我們需要下載angular的類庫(kù)文件和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

我們需要將新增的目錄加入到配置中去,打開(kāi) karma.conf.js 然后添加成下面內(nèi)容:

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

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

npm test

運(yùn)行結(jié)果依舊是失敗的,因?yàn)槲覀儾](méi)有添加我們的controller,接下來(lái)我們將下面的代碼粘貼到 app/calculator.controller.js

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

在命令行工具里面我們可以看到karma檢測(cè)到了文件變化,重新進(jìn)行測(cè)試,這個(gè)時(shí)候測(cè)試就會(huì)通過(guò)了。

接下來(lái)我們添加一個(gè)新的測(cè)試用例,我們將它增加到calculator.controller.test.js中去,把它放到describe作用域內(nèi)。

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

命令行這個(gè)時(shí)候會(huì)輸出測(cè)試不通過(guò),這個(gè)時(shí)候我們需要更新我們的controller代碼

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

測(cè)試通過(guò)的輸出如下:

更多

原文作者寫(xiě)過(guò)一篇文章更為詳細(xì)的介紹Karam,大家可以去深入的了解karma的使用。

karma支持不同的瀏覽器,我們可以在測(cè)試的時(shí)候設(shè)置這些瀏覽器:

chrome

safari

firefox

IE

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

項(xiàng)目代碼

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

@ Bradley Braithwaite

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79629.html

相關(guān)文章

  • Angular單元測(cè)試系列-簡(jiǎn)介

    摘要:?jiǎn)卧獪y(cè)試我們可以將其分成兩類獨(dú)立單獨(dú)測(cè)試與測(cè)試工具集。工具集還有更多,這一切我們將在單元測(cè)試組件與指令單元測(cè)試逐一說(shuō)明。那么下一篇,我們將介紹如何使用進(jìn)行單元測(cè)試。 本文將探討如何搭建測(cè)試環(huán)境、以及Angular測(cè)試工具集。 測(cè)試環(huán)境 絕大部分都是利用Angular Cli來(lái)創(chuàng)建項(xiàng)目,因此,默認(rèn)已經(jīng)集成我們所需要的npm包與腳本;當(dāng)然,如果你是使用自建或官網(wǎng) quickstart 的話...

    CNZPH 評(píng)論0 收藏0
  • Angular-mock之使用$httpBackend服務(wù)測(cè)試$http

    摘要:簡(jiǎn)介模塊為單元測(cè)試提供模塊定義加載注入等支持。為使用了的應(yīng)用提供單元測(cè)試的偽后臺(tái)。根據(jù)提示進(jìn)行設(shè)置即可。將該文件保存為,測(cè)試時(shí)需按順序?qū)y(cè)試項(xiàng)目文件及依賴文件引入。最后在請(qǐng)求后執(zhí)行就會(huì)立即執(zhí)行完成請(qǐng)求。參考官方單元測(cè)試學(xué)習(xí)筆記 Angular-mock簡(jiǎn)介 Angular-mock模塊為angular單元測(cè)試提供模塊定義、加載、注入等支持。輔助Karma、Jasmine等JS測(cè)試工具來(lái)...

    rockswang 評(píng)論0 收藏0
  • Angular 4 簡(jiǎn)單入門筆記

    摘要:首先,我們需要在入口頁(yè)面的中配置根路徑然后創(chuàng)建一個(gè)路由模塊路由配置在主模塊中導(dǎo)入配置好的路由模塊而在頁(yè)面中需要一個(gè)容器去承載上面代碼中的定義了用戶點(diǎn)擊后的路由跳轉(zhuǎn),定義該路由激活時(shí)的樣式類。 剛實(shí)習(xí)的時(shí)候用過(guò)AngularJS,那時(shí)候真的是連原生JavaScript都不會(huì)寫(xiě),依樣畫(huà)葫蘆做了幾個(gè)管理后臺(tái)。然后突然換項(xiàng)目了,AngularJS就不寫(xiě)了,感覺(jué)前前后后接觸了一年多的Angula...

    whlong 評(píng)論0 收藏0
  • 你的第一個(gè)AngularJS應(yīng)用--教程二:基架、建立和測(cè)試的工具

    摘要:包括腳手架依賴管理準(zhǔn)備測(cè)試包括單元測(cè)試和端到端測(cè)試。我們用來(lái)開(kāi)發(fā)的工具有。是一個(gè)工具集,包含個(gè)核心組件,,和腳手架工具。當(dāng)你正在做自己的一個(gè)項(xiàng)目時(shí),使用哪些模塊將取決于你自己。這個(gè)目錄當(dāng)然是測(cè)試文件。 介紹 有很多可用的工具可以幫助你開(kāi)發(fā)AngularJS 應(yīng)用,那些非常復(fù)雜的框架不在我的討論范圍之中,這也是我開(kāi)始這系列教程的原因。 在第一部分,我們掌握了AngularJS框架的基本...

    k00baa 評(píng)論0 收藏0
  • angular 1.x多項(xiàng)目共享子項(xiàng)目實(shí)踐之路

    摘要:可發(fā)布這一部分會(huì)在下一章管理對(duì)子項(xiàng)目引用中詳細(xì)說(shuō)明。總結(jié)本文總結(jié)了多項(xiàng)目共享子項(xiàng)目工程化方面的一些實(shí)踐,并不涉及到復(fù)雜的代碼,主要涉及到的概念,使用進(jìn)行包管理,使用作為自動(dòng)化工具等工程化的知識(shí)。 背景 公司的產(chǎn)品線涵蓋多個(gè)產(chǎn)品,這些產(chǎn)品中會(huì)有一些相同的功能,如登錄,認(rèn)證等,為了保持這些功能在各個(gè)產(chǎn)品中的一致性,我們?cè)诟鱾€(gè)產(chǎn)品中維護(hù)一份相同的代碼。這帶來(lái)了很大的不便:當(dāng)出現(xiàn)新的需求時(shí),不...

    mist14 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<