最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對Angular.js Controller如何進行單元測試

 更新時間:2016年10月25日 11:52:31   投稿:daisy  
這篇文章主要給大家介紹了如何對Angular Controller進行單頁測試。如果你不太了解angular也沒關(guān)系,本文也會提及關(guān)于Angular的一些知識。文中通過示例代碼介紹的很詳細,詳細對大家的理解和學(xué)習(xí)很有幫助,下面來一起看看吧。

一、寫個簡單的Angular App

在開始寫測試之前,我們先寫一個簡單的計算App,它會計算兩個數(shù)字之和。

代碼如下:

<html> 
 <head>
 <script type="text/javascript" src="https://code.angularjs.org/1.4.0-rc.2/angular.min.js"></script>
 </head>
 <body>
 <!-- This div element corresponds to the CalculatorController we created via the JavaScript-->
 <div ng-controller="CalculatorController">
  <input ng-model="x" type="number">
  <input ng-model="y" type="number">
  <strong>{{z}}</strong>
  <!-- the value for ngClick maps to the sum function within the controller body -->
  <input type="button" ng-click="sum()" value="+">
 </div>
 </body>
 <script type="text/javascript">

 // Creates a new module called 'calculatorApp'
 angular.module('calculatorApp', []);

 // Registers a controller to our module 'calculatorApp'.
 angular.module('calculatorApp').controller('CalculatorController', function CalculatorController($scope) {
  $scope.z = 0;
  $scope.sum = function() {
  $scope.z = $scope.x + $scope.y;
  };
 });

 // load the app
 angular.element(document).ready(function() {
  angular.bootstrap(document, ['calculatorApp']);
 });

 </script>
</html> 

二、簡單說說里面涉及的一些基本概念:

創(chuàng)建一個 module

什么是angular.module?它是用于創(chuàng)建,回收模塊的地方 。我們創(chuàng)建一個名為calculatorApp新的模塊,我們并將組件添加到這個模塊里。

angular.module('calculatorApp', []);

關(guān)于第二個參數(shù)?第二個參數(shù)必須的,表明我們正在創(chuàng)造一個新的模塊。如果需要我們的應(yīng)用程序有其他的依賴,我們可以將它們['ngResource','ngCookies']傳入進去。 第二個參數(shù)的存在的表示這是一個請求返回的模塊的實例。

從概念上講,它本意是類似下面的意思:

* angular.module.createInstance(name, requires);
* angular.module.getInstance(name)

然而實際我們是這樣寫的:

* angular.module('calculatorApp', []); // i.e. createInstance
* angular.module('calculatorApp'); // i.e. getInstance

關(guān)于module的更多信息 https://docs.angularjs.org/api/ng/function/angular.module

2.給module添加controller

接著我們給angular module的示例添加一個controller

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

控制器主要負責(zé)業(yè)務(wù)邏輯和視圖綁定,$scope者是視圖的控制器直線的信使。

3.連接視圖中的元素

在下面 HTML 中,我們需要計算input里面的值,而這些都包含在這個controller的div中。

<div ng-controller="CalculatorController"> 
 <input ng-model="x" type="number">
 <input ng-model="y" type="number">
 <strong>{{z}}</strong>
 <!-- the value for ngClick maps to the sum function within the controller body -->
 <input type="button" ng-click="sum()" value="+">
</div> 

input 中的ng-model綁定的的值及時$scope上定義的比如$scope.x,我們還在button元素使用ng-click綁定了$scope.sum方法。

三、添加測試

接下來終于到了我們的主題,添加一些單元測試給controller,我們忽略代碼中html部分,主要集中在controller的代碼中。

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

為了測試 controller,我們還得提及下面幾點? + 如何創(chuàng)建一個controller實例 + 如何get/set一個對象的屬性 + 如何調(diào)用$scope里面的函數(shù)

describe('calculator', function () {

 beforeEach(angular.mock.module('calculatorApp'));

 var $controller;

 beforeEach(angular.mock.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);
 }); 
 });

});

開始前我們需要引入ngMock,我們在測試的代碼加入angular.mock

,ngMock模塊提供了一種機制進行諸如以及虛擬的service進行單元測試。

四、如何獲取controller的實例

使用ngMock我們可以注冊一個calculator app實例。

beforeEach(angular.mock.module('calculatorApp')); 

一旦calculatorApp初始化后,我們可以使用inject函數(shù),這樣可以解決controller的引用問題。

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

一旦app加載完了,我們使用了inject函數(shù),$controller service可以獲取 CalculatorController 的實例。

var controller = $controller('CalculatorController', { $scope: $scope }); 

五、如何get/set一個對象的屬性

在上篇代碼中我們已經(jīng)可以獲取一個controller的實例,在括號的第二個參數(shù)實際是controller自己,我們的controller只有一個參數(shù) $scope對象

function CalculatorController($scope) { ... } 

在我們的測試中$scope代表的就是一個簡單的JavaScript對象。

var $scope = {}; 
var controller = $controller('CalculatorController', { $scope: $scope }); 
// set some properties on the scope object
$scope.x = 1;
$scope.y = 2;

我們設(shè)置x,y的值,模擬剛才的gif中的所展示的一樣。我們同意也可以讀取對象中的屬性,就像下面這段測試的斷言:

expect($scope.z).toBe(3); 

六、如何調(diào)用$scope里面的函數(shù)

最后一件事情就是我們?nèi)绾文M用戶的點擊,就像我們在絕大多數(shù)JS中使用的一致,,其實就是簡單的調(diào)用函數(shù)就行,

$scope.sum();

總結(jié)

本篇文章簡單的基本的介紹了如何對angular controller進行單元測試,但是這是建立在不停的刷新瀏覽器基礎(chǔ)上, 而這些流暢可以再好,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • angularjs下拉框空白的解決辦法

    angularjs下拉框空白的解決辦法

    這篇文章主要為大家詳細介紹了angularjs下拉框空白的解決方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • AngularJS基礎(chǔ) ng-class-odd 指令示例

    AngularJS基礎(chǔ) ng-class-odd 指令示例

    本文主要介紹AngularJS ng-class-odd 指令,這里對ng-class-odd基礎(chǔ)知識做了詳細整理,并有示例代碼和效果圖,學(xué)習(xí)AngularJS的同學(xué)可以參考下
    2016-08-08
  • Angular2使用jQuery的方法教程

    Angular2使用jQuery的方法教程

    這篇文章主要給大家介紹了關(guān)于Angular2使用jQuery的方法教程,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-05-05
  • 談?wù)凙ngularJs中的隱藏和顯示

    談?wù)凙ngularJs中的隱藏和顯示

    本文給大家介紹angularjs 隱藏和顯示,對angularjs 隱藏和顯示相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 詳解AngularJS之$window窗口對象

    詳解AngularJS之$window窗口對象

    本篇文章主要介紹了AngularJS之$window窗口對象,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • angular實現(xiàn)頁面打印局部功能的思考與方法

    angular實現(xiàn)頁面打印局部功能的思考與方法

    這篇文章主要給大家介紹了關(guān)于angular實現(xiàn)頁面打印局部功能的思考與方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 詳解Angular數(shù)據(jù)綁定及其實現(xiàn)方式

    詳解Angular數(shù)據(jù)綁定及其實現(xiàn)方式

    數(shù)據(jù)綁定是將應(yīng)用程序UI或用戶界面綁定到模型的機制。使用數(shù)據(jù)綁定,用戶將能夠使用瀏覽器來操縱網(wǎng)站上存在的元素。
    2021-05-05
  • angular2系列之路由轉(zhuǎn)場動畫的示例代碼

    angular2系列之路由轉(zhuǎn)場動畫的示例代碼

    本篇文章主要介紹了angular2系列之路由轉(zhuǎn)場動畫的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • angular組件繼承的實現(xiàn)方法

    angular組件繼承的實現(xiàn)方法

    本篇文章主要介紹了angular組件繼承的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • angular2中使用第三方j(luò)s庫的實例

    angular2中使用第三方j(luò)s庫的實例

    下面小編就為大家分享一篇angular2中使用第三方j(luò)s庫的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02

最新評論

揭东县| 汪清县| 长治县| 确山县| 静海县| 瑞安市| 丹凤县| 霍邱县| 焦作市| 广德县| 休宁县| 二手房| 大荔县| 新乐市| 游戏| 五大连池市| 大荔县| 新龙县| 桂阳县| 安图县| 双柏县| 孟州市| 葵青区| 常德市| 河西区| 广南县| 建昌县| 仪陇县| 江华| 抚州市| 周至县| 汝阳县| 噶尔县| 玉田县| 黎川县| 惠来县| 剑河县| 文化| 宁武县| 利辛县| 乐安县|