【angularjs】自動化測試流程

目錄結(jié)構(gòu):

首先我們來看一下一個project創(chuàng)建好之后,整個工程的目錄結(jié)構(gòu):

web目錄結(jié)構(gòu).png

其中工具會自動生成test目錄侠畔,其中放置對controllers的單元測試代碼,main.js和about.js都是自動生成的损晤。一般情況下软棺,app/scripts/controllers下的每個文件都對應(yīng)一個測試代碼。

代碼邏輯:

業(yè)務(wù)代碼:

/**
 * Created by jrzhaoxueyong on 2017/3/8.
 */
'use strict';

angular.module('webApp')
  .controller('LoginCtrl', function ($rootScope, $location, $scope, AuthService) {
    $scope.loginUser = function (credentials) {
      $scope.credentials = {
        username : '',
        password : ''
      };
      console.log('login:', credentials);
      AuthService.login(credentials);
      $location.path('/natgw')
    };

    $rootScope.isUserAuthenticated = function () {
      return AuthService.isAuthenticated();
    }
  });

測試代碼:

'use strict';

describe('Controller: LoginCtrl', function () {

  // load the controller's module
  beforeEach(module('webApp'));

  it('should have a method to check user is authenticated', function () {
    // Initialize the controller and a mock scope
    inject(function ($controller, $rootScope, $location) {
      var scope = $rootScope.$new();
      var authService = {
        isAuthenticated: function () {
          return true;
        }
      };
      $controller('LoginCtrl', {
        $scope: scope,
        // place here mocked dependencies
        AuthService: authService,
        $rootScope: $rootScope,
        $location: $location
      });
      expect($rootScope.isUserAuthenticated()).toBe(true);
    });
  });
});

上述是最簡單的測試套尤勋,針對Controller做相關(guān)測試其他如Directives喘落、Filters茵宪、Factories可以參考文章結(jié)尾的參考資料。代碼樣例是驗證isUserAuthenticated方法的瘦棋。下面對這段代碼做一個解剖:

  • describe屬性:

    describe參數(shù)是一個全局的Jasmine方法稀火,定義了一個測試套。其中有兩個參數(shù):一個字符串表示這個測試套的標題兽狭;一個函數(shù)是實現(xiàn)這個測試套的具體代碼塊憾股。

    describe("A Test Suite", function() {
    })
    
  • beforeEach屬性:

    主要用來設(shè)置測試套的前置規(guī)則鹿蜀,相當于setup箕慧,與afterEach作用相似,afterEach作用于teardown相似茴恰。

    beforeEach(module('webApp')); //module即加載了webApp模塊
    
  • it屬性:

    一般一個it對應(yīng)一個用例可以包含一個或多個expect方法倍奢,it有兩個入?yún)⒌苁矗谝粋€字符串表示這個用例的標題,第二個函數(shù)是這個用例的具體實現(xiàn)。

    it('should have a method to check user is authenticated', function () {
      });
    
  • inject屬性:

    打樁一些參數(shù)和方法印蔬,比如業(yè)務(wù)代碼中需要$scope$rootScope派哲、$location偎血、AuthService四個入?yún)ⅲ渲行枰獙?code>AuthService進行打樁雕沉,因為這是自定義Service集乔,此外$scope是局部參數(shù),這里需要從$rootScope生成坡椒。其他兩個參數(shù)都是全局參數(shù)扰路,且不涉及自定義的屬性。

    var scope = $rootScope.$new();
    var authService = {
      isAuthenticated: function () {
        return true;
      }
    };
    
  • $controller屬性:

    這個屬性很重要倔叼,它用來實例化controller汗唱,并把自己定義好的樁函數(shù)傳遞進去。這樣后續(xù)expect就能得到想要的結(jié)果了丈攒。

    $controller('LoginCtrl', {
      $scope: scope,
      // place here mocked dependencies
      AuthService: authService,
      $rootScope: $rootScope,
      $location: $location
    });
    
  • expect屬性:

    主要的測試函數(shù)哩罪,執(zhí)行一個表達式,并對結(jié)果做驗證巡验。其中际插,驗證的方法包括這里用到的toBetoEqual深碱、toContain腹鹉、toMatchtoBeDefined等敷硅。

    expect($rootScope.isUserAuthenticated()).toBe(true);
    

執(zhí)行用例:

至此功咒,整個測試用例就寫完了愉阎,下面看看運行結(jié)果:

Controller\web> grunt test
測試結(jié)果.png

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市力奋,隨后出現(xiàn)的幾起案子榜旦,更是在濱河造成了極大的恐慌,老刑警劉巖景殷,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溅呢,死亡現(xiàn)場離奇詭異,居然都是意外死亡猿挚,警方通過查閱死者的電腦和手機咐旧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绩蜻,“玉大人铣墨,你說我怎么就攤上這事“炀” “怎么了伊约?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長孕蝉。 經(jīng)常有香客問我屡律,道長,這世上最難降的妖魔是什么降淮? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任超埋,我火速辦了婚禮,結(jié)果婚禮上骤肛,老公的妹妹穿的比我還像新娘纳本。我一直安慰自己,他們只是感情好腋颠,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布繁成。 她就那樣靜靜地躺著,像睡著了一般淑玫。 火紅的嫁衣襯著肌膚如雪巾腕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天絮蒿,我揣著相機與錄音尊搬,去河邊找鬼。 笑死土涝,一個胖子當著我的面吹牛佛寿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冀泻,長吁一口氣:“原來是場噩夢啊……” “哼常侣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起弹渔,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胳施,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肢专,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舞肆,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年博杖,在試婚紗的時候發(fā)現(xiàn)自己被綠了椿胯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡欧募,死狀恐怖压状,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跟继,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布镣丑,位于F島的核電站舔糖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莺匠。R本人自食惡果不足惜金吗,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趣竣。 院中可真熱鬧摇庙,春花似錦、人聲如沸遥缕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽单匣。三九已至夕凝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間户秤,已是汗流浹背码秉。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸡号,地道東北人转砖。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像鲸伴,于是被迫代替她去往敵國和親府蔗。 傳聞我的和親對象是個殘疾皇子莉兰,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • AngularJS是什么?AngularJs(后面就簡稱ng了)是一個用于設(shè)計動態(tài)web應(yīng)用的結(jié)構(gòu)框架礁竞。首先糖荒,它是...
    200813閱讀 1,606評論 0 3
  • Angular面試題 一、ng-show/ng-hide與ng-if的區(qū)別模捂? 第一點區(qū)別是捶朵,ng-if在后面表達式...
    w_zhuan閱讀 5,527評論 0 26
  • AngularJS是什么 AngularJS的官方文檔這樣介紹它: 完全使用JavaScript編寫的客戶端技術(shù)。...
    oWSQo閱讀 1,313評論 0 10
  • 通過AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
    中小戀閱讀 1,759評論 1 21
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理狂男,服務(wù)發(fā)現(xiàn)综看,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139