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

AngularJS 單元測試(一)詳解

 更新時間:2016年09月21日 10:39:49   作者:MakingChoice  
這篇文章主要介紹了AngularJS 單元測試(一)詳解的相關(guān)資料,需要的朋友可以參考下

AngularJS單元測試

網(wǎng)上有很多單元測試的教程,比如如何安裝jasmine和ngMock,大家可以搜一下。這里就不在說了。下面重點介紹一個單元測試的過程。

加載一個模塊

AngularJS用module來包括應(yīng)用不同的部分比如controllers,services, filters。為了測試不同的部分,我們需要一個不同模塊的引用,并且加載它。Angularjs模塊注入使用ngMock模塊。ngMock模塊能夠注入服務(wù)service進(jìn)入單元測試。
ngMock暴露出angular.mock.module方法,縮寫是module。

準(zhǔn)備

需要準(zhǔn)備的就是一個簡單的AngularJS啟動模塊。

如何實現(xiàn)

 angular.mock.module方法被用在beforeEach方法中。這個module方法需要一個模塊的名字或者另外一個字面量對象來替代,將會被注入。

1、使用一個字符串名字來代表模塊

 beforeEach(module('services.emcees'))

2、添加字面量對象

 beforeEach(module('services.emcees',{
 beatjunkies': {
  'dj': 'Babu'
 })
 })


3、現(xiàn)在可以在測試中使用beatjunkies引用檢索解決的對象,返回{'dj': 'Babu'}

4、最后你也可以提供一個方法,提供一個rapper引用。

 beforeEach(module('services.emcees'),{
 beatjunkies': {
  'dj': 'Babu'
 })
 },function($provider){
 $provider.value('rapper', 'madchild')
 })


寫一個測試

例如這個例子,將要開始測試一個關(guān)于更改scope值來更新內(nèi)容的指令。當(dāng)scope上定義的一個noclick方法觸發(fā)的時候這個值就會被分配。這需要在HTML上的按鈕觸發(fā)。

例如:

 .directive('emcee',function(){
 return{
  restrict:'E',
  link:function(scope,element,attr){
   scope.onClick=function(){
    element.text('Step up ' + scope.emcee + '!')
   }
  }
 }

 })

具體做法

1、創(chuàng)建兩個變量,一個用于scope(var scope),另一個用于element(var element)。

2、確定載入你的模塊 beforeEach(module('cookbook'))

3、創(chuàng)建一個beforeEach方法用來注入必要的依賴,并且指定1中的變量來聲明這些變量。包括創(chuàng)建一個新的scope對象和為scope指定emcee值。

 beforeEach(inject(function($rootscope,$compile){
 rootscope=$rootscope;
 scope=$rootscope.$new();
 scope.emcee='Izzy Ice'
 }))

4、緊接3在beforeEach函數(shù)中加入創(chuàng)建指令的部分。

 beforeEach(inject(function($rootscope,$compile){
 rootscope=$rootscope;
 scope=$rootscope.$new();
 scope.emcee='Izzy Ice';
 element=angular.element('<emcee></emcee>');
 $compile(element)(scope);
 }))

5、緊接著第三步在beforeEach中啟動所有的watcher

 scope.$digest();

6、需要創(chuàng)建一個新的spec來定義期望的結(jié)果是什么。

 it('should assign scope emcee to element text when the onClick handler is called',function(){ })

7、緊接步驟6spec中,添加觸發(fā)onClick的方法。

 scope.onClick

8、在步驟6spec中,添加一個用于匹配element值的期望

 expect(element.text()).tobe('Step up Izzy Ice!')

9、整合

 it('should assign scope emcee to element text when the onClick handler is called', function () {
  scope.onClick ();
  expect(element.text()).toBe('Step up Izzy Ice!');
});

原理

步驟1中聲明了兩個能被重復(fù)測試的變量,在步驟3中使用beforeEach確保測試運行前這兩個變量被分配值。在步驟3中也為scope定義了一個值scope.emcee,期望這個值能與指令相關(guān)聯(lián)。在步驟4中我們編譯我們的指令,
在步驟5中調(diào)用$scope.$degist確保所有的綁定都更新過了。

在步驟6中聲明這個spec測試并且規(guī)定我們希望從中得到什么,我們觸發(fā)scope.onClick然后利用scope提供的值來更新element。Angular element提供了一個方便的text函數(shù),用來返回element的內(nèi)容。
在步驟8中使用這個text返回的值來與 Step up Izzy Ice 進(jìn)行對比。

一些常用的matchers方法。

1、實際值包含期望值。

 expect($djListItems().eq(0).html()).toContain('DStyles<br>\nQbert<br>\nMix Master Mike<br>\nShortkut<br>\nA-Trak<br>\nBabu')

2、實際值與期望值是否一致。

 expect(element.text()).toBe('iec')

3、實際值與期望值相等

 expect(scope.emcee.length).toEqual(0)

4、實際值期望值正則匹配相等

 expect(element.text().toMatch(/Eyadea/))

5、實際值是否被定義

 expect($cookies.bboy.toBeDefined)

6、如果實際值沒有被定義

 expect($cookiew.bboy).not.toBeDefined()

7、實際值是否為空

 expect(BreakBeat.tracks()).tobeNull()

8、實際值是否為不空

expect(BreakBeat.tracks()).not.tobeNull();
9、實際值是否為false

 expect(element(by.css('button')).getAttribute('disabled').toBeFalsy())

10、實際值為真

 expect(angular.element(element.find('a')[0].parent().hasClass('nghide').getAttribute('disabled')).toBeTruthy())

11、實際值少于期望值

 expect(scope.deejays.length).toBeLessThan(2);

12、實際值大于期望值

 expect(scope.deejays.length).toBeGraterThan(2)

以上就是對AngularJS 單元測試 的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對本站的支持!

相關(guān)文章

  • Angular2中Bootstrap界面庫ng-bootstrap詳解

    Angular2中Bootstrap界面庫ng-bootstrap詳解

    不知道大家有沒有留意,最近angular-ui團(tuán)隊終于正式發(fā)布了基于 Angular2的Bootstrap界面庫ng-bootstrap ,之前工作中一直在用 AngularJS 1.x 的UI Bootstrap , 因此對這個ng-bootstrap 也是很感興趣,所以第一時間進(jìn)行試用。這篇文章就給大家詳細(xì)介紹下ng-bootstrap。
    2016-10-10
  • 在 Angular6 中使用 HTTP 請求服務(wù)端數(shù)據(jù)的步驟詳解

    在 Angular6 中使用 HTTP 請求服務(wù)端數(shù)據(jù)的步驟詳解

    本文分步驟給大家介紹了在 Angular6 中使用 HTTP 請求服務(wù)端數(shù)據(jù)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 淺談Angularjs中不同類型的雙向數(shù)據(jù)綁定

    淺談Angularjs中不同類型的雙向數(shù)據(jù)綁定

    這篇文章主要介紹了淺談Angularjs中不同類型的雙向數(shù)據(jù)綁定,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解Angular.js中$http攔截器的介紹及使用

    詳解Angular.js中$http攔截器的介紹及使用

    攔截器就是在目標(biāo)達(dá)到目的地之前對其進(jìn)行處理以便處理結(jié)果更加符合我們的預(yù)期,下面這篇文章主要給大家介紹了關(guān)于Angular.js中$http攔截器的介紹及使用的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考學(xué)習(xí)。
    2017-07-07
  • angular2組件中定時刷新并清除定時器的實例講解

    angular2組件中定時刷新并清除定時器的實例講解

    今天小編就為大家分享一篇angular2組件中定時刷新并清除定時器的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 收藏AngularJS中最重要的核心功能

    收藏AngularJS中最重要的核心功能

    本文是小編日常收集整理的關(guān)于:AngularJS中最重要的核心功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-07-07
  • AngularJS指令與指令之間的交互功能示例

    AngularJS指令與指令之間的交互功能示例

    這篇文章主要介紹了AngularJS指令與指令之間的交互功能,結(jié)合實例形式分析了AngularJS指令交互操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-12-12
  • AngularJS動態(tài)加載模塊和依賴的方法分析

    AngularJS動態(tài)加載模塊和依賴的方法分析

    這篇文章主要介紹了AngularJS動態(tài)加載模塊和依賴的方法,結(jié)合實例形式分析了AngularJS使用ocLazyLoad實現(xiàn)動態(tài)加載的相關(guān)操作技巧,需要的朋友可以參考下
    2016-11-11
  • 在Angular中實現(xiàn)懶加載的示例代碼

    在Angular中實現(xiàn)懶加載的示例代碼

    在Angular中,懶加載技術(shù)通過路由配置實現(xiàn)模塊的按需加載,可優(yōu)化應(yīng)用啟動時間和減少初始加載代碼量,首先創(chuàng)建獨立模塊,在模板中使用<router-outlet>插入懶加載組件,并可采用預(yù)加載策略如PreloadAllModules,以提前加載所有懶加載模塊,優(yōu)化加載性能
    2024-10-10
  • angularjs實現(xiàn)過濾并替換關(guān)鍵字小功能

    angularjs實現(xiàn)過濾并替換關(guān)鍵字小功能

    這篇文章主要為大家詳細(xì)介紹了angularjs實現(xiàn)過濾并替換關(guān)鍵字小功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評論

连山| 乃东县| 广平县| 柳州市| 彝良县| 台湾省| 松阳县| 红安县| 田林县| 治县。| 恩施市| 涡阳县| 全椒县| 同江市| 巴里| 彰武县| 固安县| 贵南县| 开江县| 保靖县| 天长市| 湘西| 瑞丽市| 靖安县| 大石桥市| 阿瓦提县| 静海县| 遵义县| 太和县| 达日县| 哈尔滨市| 富民县| 绥棱县| 上林县| 邢台县| 临高县| 宝应县| 平塘县| 杭锦旗| 恩施市| 黄平县|