亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 08:40:03
字體:
來源:轉載
供稿:網友

一、寫個簡單的Angular App

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

代碼如下:

<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> 

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

創建一個 module

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

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

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

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

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

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

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

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

控制器主要負責業務邏輯和視圖綁定,$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,我們還得提及下面幾點? + 如何創建一個controller實例 + 如何get/set一個對象的屬性 + 如何調用$scope里面的函數

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函數,這樣可以解決controller的引用問題。

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

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

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

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

在上篇代碼中我們已經可以獲取一個controller的實例,在括號的第二個參數實際是controller自己,我們的controller只有一個參數 $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;

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

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

六、如何調用$scope里面的函數

最后一件事情就是我們如何模擬用戶的點擊,就像我們在絕大多數JS中使用的一致,,其實就是簡單的調用函數就行,

$scope.sum();

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线精品一区免费香蕉| 国产一区二区美女视频| 久久久精品一区二区三区| 久99久在线视频| 成人黄色免费网站在线观看| 欧美日韩免费在线| 最近2019中文免费高清视频观看www99| 亚洲人成电影网站色| 国产亚洲a∨片在线观看| 在线亚洲男人天堂| 欧美日韩视频在线| 伊人一区二区三区久久精品| 亚洲欧美日韩成人| 91高清视频在线免费观看| 成人啪啪免费看| 日本免费在线精品| 亚洲最大福利视频网站| 日本a级片电影一区二区| 97精品国产97久久久久久春色| 欧美精品18videos性欧美| 欧美激情在线狂野欧美精品| 亚洲精品av在线播放| 夜夜狂射影院欧美极品| 国产一区二区久久精品| 自拍偷拍亚洲在线| 亚洲最大福利网站| 日韩一区二区欧美| 久久成人这里只有精品| 日韩在线播放一区| 亚洲精品一区中文字幕乱码| 免费不卡在线观看av| 亚洲aⅴ男人的天堂在线观看| 亚洲精品少妇网址| 在线看日韩av| 国产精品爽爽爽爽爽爽在线观看| 91免费电影网站| 2020久久国产精品| 国产男女猛烈无遮挡91| 亚洲精品白浆高清久久久久久| 国产成人短视频| 久久精品男人天堂| 成人黄色av网| 亚洲一区美女视频在线观看免费| 日本一欧美一欧美一亚洲视频| 亚洲精品视频免费在线观看| 狠狠躁夜夜躁人人爽天天天天97| 国产精品爽黄69天堂a| 日韩在线视频免费观看高清中文| 日韩人体视频一二区| 欧美亚洲另类制服自拍| 欧美成人一二三| 日韩国产一区三区| 久久精品国产亚洲7777| 久久久精品久久久| 2018中文字幕一区二区三区| 国产精品久久久av久久久| 国产日韩欧美在线看| 最近2019年日本中文免费字幕| 欧美激情中文字幕在线| 国产精品专区h在线观看| 91中文字幕在线| 欧美视频专区一二在线观看| 久久久久亚洲精品| 91视频九色网站| 久久久国产精品x99av| 日韩中文在线中文网在线观看| 国产自摸综合网| 欧美精品在线播放| 欧美成人免费一级人片100| 91久热免费在线视频| 欧美午夜女人视频在线| 成人观看高清在线观看免费| 欧美激情第三页| 日韩在线观看网站| 国产激情久久久| 国产精品久久久久久久久久久不卡| 精品国产乱码久久久久酒店| 久久乐国产精品| 久久精品亚洲一区| 亚洲精品一区中文字幕乱码| 成人网在线视频| 亚洲国产精品久久久久| 日日噜噜噜夜夜爽亚洲精品| 日韩激情av在线播放| 国产69久久精品成人看| 国产一区二区动漫| 亚洲精品网站在线播放gif| 国产日韩在线一区| 97碰碰碰免费色视频| 国产精品青青在线观看爽香蕉| 亚洲高清不卡av| 欧美视频在线看| 日本精品va在线观看| 久久亚洲国产精品| 精品日本美女福利在线观看| 国产在线视频不卡| 日韩有码在线视频| 欧美日韩国产色| 欧美日韩中文字幕综合视频| 一区二区三区久久精品| 精品久久久一区二区| 欧美激情一区二区久久久| 久久久久久国产精品| 久久精品中文字幕电影| 北条麻妃99精品青青久久| 95av在线视频| 国产91ⅴ在线精品免费观看| 日韩美女视频在线观看| 中文字幕亚洲欧美一区二区三区| 欧美在线视频播放| 欧美日韩国产丝袜美女| 成人激情视频网| 色婷婷av一区二区三区在线观看| 91亚洲国产精品| 亚洲女同精品视频| 日韩在线视频一区| 国产一区二区三区在线看| 九九精品在线视频| 亚洲国产日韩欧美综合久久| 欧美性色视频在线| 国产成人精品日本亚洲专区61| 亚洲片在线观看| 日韩中文在线中文网在线观看| 美女少妇精品视频| 国内伊人久久久久久网站视频| 一本色道久久88亚洲综合88| 92版电视剧仙鹤神针在线观看| 69视频在线免费观看| 亚洲japanese制服美女| 国产免费一区二区三区香蕉精| 91精品国产777在线观看| 国产精品视频一区二区三区四| 亚洲理论在线a中文字幕| 国产精品久久国产精品99gif| 91精品久久久久久久| 亚洲欧洲成视频免费观看| 中文欧美在线视频| 亚洲欧洲日本专区| 亚洲精品美女久久久| 日本一区二区在线免费播放| 精品久久久国产精品999| 欧美成人高清视频| 中文字幕日本欧美| 成人免费视频网| 国产亚洲精品久久久久久牛牛| 欧美一区亚洲一区| 国产亚洲精品成人av久久ww| 欧美午夜www高清视频| 97国产成人精品视频| 91午夜在线播放| 国产成人精品优优av| 亲爱的老师9免费观看全集电视剧| 亚洲免费视频一区二区| 久久久久久午夜| 国产精品久久在线观看| 欧美在线视频a| 国产精品91在线观看| 日韩最新在线视频| 成人黄色短视频在线观看| 国产精品视频资源| 97福利一区二区| 国产99久久精品一区二区 夜夜躁日日躁| 日韩视频在线观看免费| 日韩精品视频免费在线观看|