日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Angularjs+jasmine+karma的测试驱动开发(TDD)实例

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Angularjs+jasmine+karma的测试驱动开发(TDD)实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介(摘自baidu)

測試驅動開發,英文全稱Test-Driven Development,簡稱TDD,是一種不同于傳統軟件開發流程的新型的開發方法。它要求在編寫某個功能的代碼之前先編寫測試代碼,然后只編寫使測試通過的功能代碼,通過測試來推動整個開發的進行。這有助于編寫簡潔可用和高質量的代碼,并加速開發過程。

?

優勢

  • 高質量
  • 簡潔可用
  • 便于重構
  • ?

    流程

  • 與客戶一起建立測試用例,此時的每個測試用例只是簡單的一句話就可以,也可以引導客戶一起建立測試用例表格,包含兩列“輸入/動作”,“期望的輸出”
  • 對所有的測試根據難易程度進行排序,從簡單到難
  • 程序員建立測試用例的偽代碼,并確定出測試數據
  • 按順序編寫測試用例,每次只寫一個,當測試不通過時,進行代碼的創建或修改
  • 在“新建測試用例”-》“實現測試用例”的過程中的保持代碼整潔,進行必要的重構
  • ?

    類庫/工具介紹

    angularjs 1.X: 依賴注入,MVC架構,使代碼可測試

    karma: 測試工具

    jasmine: 測試框架

    ?

    實例

    多選

    功能描述

    按住ctrl,shift時將多選項目,因右鍵菜單的不同,isEdit=true的項,將顯示菜單1,isEdit=false的項將顯示菜單2,isEdit不同的項不能被一起選中,某些項標注為opEnable為false的表示不能被操作,便不能被選中,切換tab時,當前所有選中的項將失效。

    ?

    定義測試用例

  • 按住ctrl,點擊某一項,能選中某一項
  • 按住ctrl, 點擊已經選中的項,能取消選擇
  • 按住ctrl,能多選
  • 按住ctrl,選取不同isEdit區域時將取消原先所有的選中狀態
  • 切換tab,取消所有的選中狀態
  • 按住ctrl,點擊opEnable為false的項時,不選中該項
  • ?

    定義測試數據:

    ABCD為isEdit=true

    EFGH為isEdit=false

    IJKL為isEdit=true

    ?

    A的opEnable = false

    F的opEnable=false

    ?

    測試用例偽代碼

    Ctrl

  • 按住ctrl點擊B,B選中(按住ctrl,點擊某一項,能選中某一項)
  • 按住ctrl點擊B,B選中, 再次點擊B,B未選中(按住ctrl, 點擊已經選中的項,能取消選擇)
  • 按住ctrl點擊B,B選中,點擊C,C選中,點擊D,D選中(按住ctrl,能多選)
  • 按住ctrl點擊B,B選中,點擊C,C選中,點擊D,D選中,點擊E, 取消BCD的選中狀態,只選中E(按住ctrl,選取不同isEdit區域時將取消原先所有的選中狀態)
  • 按住ctrl點擊B,B選中,點擊C,C選中,點擊D,D選中,切換Tab,取消BCD的選中狀態(切換tab,取消所有的選中狀態)
  • 按住ctrl點擊A,不能選中A(針對opEnable=false的項,按住ctrl不能選中該項)
  • 按住ctrl分別點擊B, C,D,選中項為BCD,再點擊A,選中項還是只有BCD
  • ?

    Shift

    按住shift的多選將由起始項開始選到當前點擊項

    起始項定為最后一次選中的項

    ?

    起始項的測試

  • 按住ctrl點擊B, 初始項為B
  • 按住shift點擊B,起始項為B
  • 按住ctrl點擊B,再選中C再不選中C,起始項為B
  • 按住ctrl點擊B,再不選中B,起始項為-1
  • 按住ctrl點擊B,起始項為B,再選中C,起始項為C,不選中C,起始項為B,再不選中B,起始項為-1
  • 按住ctrl點擊B,起始項為B,再選中C,起始項為C,再選中D,起始項為D,不選中C,起始項為D,再不選中D,起始項為B,再不選中B,起始項為-1
  • 按住ctrl點擊A,初始項為-1
  • 按住ctrl點擊B,初始項為B, ctrl點擊A,初始項還是B
  • ?

    shift的測試

  • 初始項為-1(沒有選中項),按住shift點擊B, B選中,初始項為B
  • 初始項為B,按住shift點擊B,不取消B的選中狀態
  • 初始項為B,按住shift選D,將選中BCD
  • 初始項為D,按住shift選B,將選中BCD
  • 初始項為B,按住shift選C,將選中BC,按住ctrl點擊D, 將選中BCD,shift選A,將選中BCD
  • 初始項為B,按shift選D,初始項為D, ctrl點擊D,取消D,初始項變為C,ctrl點擊C,取消C,初始項變為B, ctrl點擊B,初始項變-1
  • 初始項為D,按shift選B,初始項為B, ctrl點擊B,取消B,初始項變為C,ctrl點擊C,取消C,初始項變為D, ctrl點擊D,初始項變-1
  • 初始項為B,shift點擊E,則取消B,只選中E,初始項相應的變為E,Ctrl點擊E,E不選中,初始項變-1
  • 初始項為B,shift點擊I,將取消B,只選中I,初始項變為I
  • shift點擊E,shift點擊H,將選中EGH,F未選中
  • shift點擊E,shift點擊H,將選中EGH,F未選中,初始項為H, ctrl點擊H, 取消H的選中狀態,初始項變為G,ctrl點擊G,取消G的選中狀態,初始項變為E
  • 若選中了BCD,切換tab,將設置回初始項為-1,取消BCD的選中狀態
  • 初始項為-1,shift點擊A,不選中A,初始項為-1
  • shift選擇B,再shift選擇D,將選中BCD,初始項變為D,若shift點擊A,則不會改變選中的BCD,初始項還是D
  • ?

    右鍵菜單

    功能描述

    右鍵項目時,存在目標項,為之后右鍵菜單中需要操作的目標,相應的菜單項會因目標不同而改變,目標項即右鍵時點中的項,如點中項在多選狀態時,則目標項為所有被選中的項,如右鍵點中得項處于未選中狀態時,則目標項為右鍵點中的項。如右鍵點中的項opEnable為false,則不彈出右鍵菜單。

    測試用例偽代碼

    定義右鍵isEdit=true時,菜單為1,定義右鍵isEdit=false時菜單為2

  • 右鍵A,不彈出菜單
  • 右鍵B,彈出菜單1,目標項為B
  • 右鍵E,彈出菜單2,目標項為E
  • Ctrl點擊BCD,右鍵B,彈出菜單1,目標項為BCD
  • Ctrl點擊BCD,右鍵E,彈出菜單2,目標項為E
  • Ctrl點擊BCD,右鍵A,不彈出菜單
  • ?

    定義測試數據

    ABCD為isEdit=true

    EFGH為isEdit=false

    IJKL為isEdit=true

    ?

    A的opEnable = false

    F的opEnable=false

    ?

    代碼如下

    測試用例 + 代碼實現

    1. 按住ctrl點擊B,B選中

    測試用例代碼

    1 it('should set B selected if ctrlClick on B', function () { 2 expect(B.selected).toBeFalsy(); 3 $scope.ctrlClick(B); 4 expect(B.selected).toBeTruthy(); 5 });

    測試報錯,ctrlClick函數未定義

    實現邏輯

    ?

    測試通過

    ?

    2. 按住ctrl點擊B,B選中, 再次點擊B,B未選中

    測試用例代碼

    1 it('should set B unselected if ctrlClick on selected B', function () { 2 expect(B.selected).toBeFalsy(); 3 $scope.ctrlClick(B); 4 expect(B.selected).toBeTruthy(); 5 $scope.ctrlClick(B); 6 expect(B.selected).toBeFalsy(); 7 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    3. 按住ctrl點擊B,B選中,點擊C,C選中,點擊D,D選中

    測試用例代碼:

    1 it('should set BCD selected if ctrlClick on B,C,D', function () { 2 expect(B.selected).toBeFalsy(); 3 expect(C.selected).toBeFalsy(); 4 expect(D.selected).toBeFalsy(); 5 $scope.ctrlClick(B); 6 expect(B.selected).toBeTruthy(); 7 $scope.ctrlClick(C); 8 expect(C.selected).toBeTruthy(); 9 $scope.ctrlClick(D); 10 expect(D.selected).toBeTruthy(); 11 });

    測試通過

    ?

    4. 按住ctrl點擊B,B選中,點擊C,C選中,點擊D,D選中,點擊E, 取消BCD的選中狀態,只選中E

    測試用例代碼

    1 it('should set BCD unselected if ctrlClick on E', function () { 2 expect(B.selected).toBeFalsy(); 3 expect(C.selected).toBeFalsy(); 4 expect(D.selected).toBeFalsy(); 5 $scope.ctrlClick(B); 6 expect(B.selected).toBeTruthy(); 7 $scope.ctrlClick(C); 8 expect(C.selected).toBeTruthy(); 9 $scope.ctrlClick(D); 10 expect(D.selected).toBeTruthy(); 11 $scope.ctrlClick(E); 12 expect(E.selected).toBeTruthy(); 13 expect(B.selected).toBeFalsy(); 14 expect(C.selected).toBeFalsy(); 15 expect(D.selected).toBeFalsy(); 16 });

    測試失敗,修改代碼

    測試通過

    ?

    5. 按住ctrl點擊B,B選中,點擊C,C選中,點擊D,D選中,切換Tab,取消BCD的選中狀態

    測試用例代碼

    1 it('should set BCD unselected if change the tab', function () { 2 expect(B.selected).toBeFalsy(); 3 expect(C.selected).toBeFalsy(); 4 expect(D.selected).toBeFalsy(); 5 $scope.ctrlClick(B); 6 expect(B.selected).toBeTruthy(); 7 $scope.ctrlClick(C); 8 expect(C.selected).toBeTruthy(); 9 $scope.ctrlClick(D); 10 expect(D.selected).toBeTruthy(); 11 $scope.selectTab("A-Shares"); 12 expect(B.selected).toBeFalsy(); 13 expect(C.selected).toBeFalsy(); 14 expect(D.selected).toBeFalsy(); 15 });

    測試失敗,修改代碼

    ?

    在原先的切換tab方法中增加了resetSelected的方法調用。

    測試通過

    ?

    6. 按住ctrl點擊A,不能選中A

    測試用例代碼

    1 it('should set A unselected if ctrlClick on A', function () { 2 expect(A.selected).toBeFalsy(); 3 $scope.ctrlClick(A); 4 expect(A.selected).toBeFalsy(); 5 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    7. 按住ctrl分別點擊B, C,D,選中項為BCD,再點擊A,選中項還是只有BCD

    測試用例代碼

    1 it('should set A unselected if ctrlClick on A', function () { 2 expect(A.selected).toBeFalsy(); 3 expect(B.selected).toBeFalsy(); 4 expect(C.selected).toBeFalsy(); 5 expect(D.selected).toBeFalsy(); 6 $scope.ctrlClick(B); 7 $scope.ctrlClick(C); 8 $scope.ctrlClick(D); 9 expect(B.selected).toBeTruthy(); 10 expect(C.selected).toBeTruthy(); 11 expect(D.selected).toBeTruthy(); 12 $scope.ctrlClick(A); 13 expect(B.selected).toBeTruthy(); 14 expect(C.selected).toBeTruthy(); 15 expect(D.selected).toBeTruthy(); 16 expect(A.selected).toBeFalsy(); 17 });

    測試通過

    ?

    8. 按住ctrl點擊B, 初始項為B

    測試用例代碼

    1 it('should set B index if ctrlClick on B', function () { 2 expect(B.selected).toBeFalsy(); 3 $scope.ctrlClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    9. 按住shift點擊B,起始項為B

    測試用例代碼

    1 it('should set B index if shiftClick on B', function () { 2 $scope.shiftClick(B); 3 expect($scope.startIndex).toEqual(B.nodeIndex); 4 });?

    測試失敗,修改代碼

    ?

    測試通過

    ?

    10. 按住ctrl點擊B,再選中C 再不選中C,起始項為B

    測試用例代碼

    1 it('should set B index if ctrlClick on B, then set C index if ctrlClick on C', function () { 2 $scope.ctrlClick(B); 3 expect($scope.startIndex).toEqual(B.nodeIndex); 4 $scope.ctrlClick(C); 5 expect($scope.startIndex).toEqual(C.nodeIndex); 6 });

    測試通過

    ?

    11. 按住ctrl點擊B,再不選中B,起始項為-1

    測試用例代碼

    1 it('should set B index if ctrlClick on B, unselected B will change the index to -1', function () { 2 expect(B.selected).toBeFalsy(); 3 $scope.ctrlClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 $scope.ctrlClick(B); 7 expect(B.selected).toBeFalsy(); 8 expect($scope.startIndex).toEqual(-1); 9 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    12. 按住ctrl點擊B,起始項為B,再選中C,起始項為C,不選中C,起始項為B,再不選中B,起始項為-1

    測試用例代碼

    1 it('should have a selectIndex list', function () { 2 expect(B.selected).toBeFalsy(); 3 expect(C.selected).toBeFalsy(); 4 $scope.ctrlClick(B); 5 expect(B.selected).toBeTruthy(); 6 expect($scope.startIndex).toEqual(B.nodeIndex); 7 $scope.ctrlClick(C); 8 expect(C.selected).toBeTruthy(); 9 expect($scope.startIndex).toEqual(C.nodeIndex); 10 $scope.ctrlClick(C); 11 expect(C.selected).toBeFalsy(); 12 expect($scope.startIndex).toEqual(B.nodeIndex); 13 $scope.ctrlClick(B); 14 expect(B.selected).toBeFalsy(); 15 expect($scope.startIndex).toEqual(-1); 16 });

    測試不通過,修改代碼

    測試通過,提取函數,重構代碼

    ?

    測試通過

    ?

    13. 按住ctrl點擊B,起始項為B,再選中C,起始項為C,再選中D,起始項為D,不選中C,起始項為D,再不選中D,起始項為B,再不選中B,起始項為-1

    測試用例代碼

    1 it('should have a selectIndex list 2', function () { 2 $scope.ctrlClick(B); 3 expect($scope.startIndex).toEqual(B.nodeIndex); 4 $scope.ctrlClick(C); 5 expect($scope.startIndex).toEqual(C.nodeIndex); 6 $scope.ctrlClick(D); 7 expect($scope.startIndex).toEqual(D.nodeIndex); 8 $scope.ctrlClick(C); 9 expect($scope.startIndex).toEqual(D.nodeIndex); 10 $scope.ctrlClick(D); 11 expect($scope.startIndex).toEqual(B.nodeIndex); 12 $scope.ctrlClick(B); 13 expect($scope.startIndex).toEqual(-1); 14 });

    測試通過

    ?

    14. 按住ctrl點擊A,初始項為-1

    測試用例代碼

    1 it('should remain index to -1 if ctrlClick on A', function () { 2 expect($scope.startIndex).toEqual(-1); 3 expect(A.selected).toBeFalsy(); 4 $scope.ctrlClick(A); 5 expect(A.selected).toBeFalsy(); 6 expect($scope.startIndex).toEqual(-1); 7 });

    測試通過

    ?

    15. 按住ctrl點擊B,初始項為B, ctrl點擊A,初始項還是B

    測試用例代碼

    1 it('should remain index to currentIndex if ctrlClick on A', function () { 2 $scope.ctrlClick(B); 3 expect($scope.startIndex).toEqual(B.nodeIndex); 4 $scope.ctrlClick(A); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 });

    測試通過

    ?

    16. 初始項為-1,按住shift點擊B, B選中,初始項為B

    測試用例代碼

    1 it('should set B index if shiftClick on B', function () { 2 expect(B.selected).toBeFalsy(); 3 $scope.shiftClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    17. 初始項為B,按住shift點擊B,不取消B的選中狀態

    測試用例代碼

    1 it('should still set B index if shiftClick on B twice', function () { 2 expect(B.selected).toBeFalsy(); 3 $scope.shiftClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 $scope.shiftClick(B); 7 expect(B.selected).toBeTruthy(); 8 expect($scope.startIndex).toEqual(B.nodeIndex); 9 });

    測試通過

    ?

    18. 初始項為B,按住shift選D,將選中BCD

    測試用例代碼

    1 it('should set BCD selected if shiftClick on B then D', function () { 2 $scope.shiftClick(B); 3 expect(B.selected).toBeTruthy(); 4 $scope.shiftClick(D); 5 expect(B.selected).toBeTruthy(); 6 expect(C.selected).toBeTruthy(); 7 expect(D.selected).toBeTruthy(); 8 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    19. 初始項為D,按住shift選B,將選中BCD

    測試用例代碼

    1 it('should set BCD selected if shiftClick on D then B', function () { 2 $scope.shiftClick(D); 3 expect(D.selected).toBeTruthy(); 4 $scope.shiftClick(B); 5 expect(B.selected).toBeTruthy(); 6 expect(C.selected).toBeTruthy(); 7 expect(D.selected).toBeTruthy(); 8 });

    測試通過

    ?

    20. 初始項為B,按住shift選C,將選中BC,按住ctrl點擊D, 將選中BCD,shift選A,將選中BCD

    測試用例代碼

    1 it('should set BCD selected if shiftClick on B,C,ctrlClick on D, shift A', function () { 2 $scope.shiftClick(B); 3 expect(B.selected).toBeTruthy(); 4 $scope.shiftClick(C); 5 expect(B.selected).toBeTruthy(); 6 expect(C.selected).toBeTruthy(); 7 $scope.ctrlClick(D); 8 expect(B.selected).toBeTruthy(); 9 expect(C.selected).toBeTruthy(); 10 expect(D.selected).toBeTruthy(); 11 $scope.shiftClick(A); 12 expect(A.selected).toBeFalsy(); 13 expect(B.selected).toBeTruthy(); 14 expect(C.selected).toBeTruthy(); 15 expect(D.selected).toBeTruthy(); 16 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    21. 初始項為B,按shift選D,初始項為D, ctrl點擊D,取消D,初始項變為C,ctrl點擊C,取消C,初始項變為B, ctrl點擊B,初始項變-1

    測試用例代碼

    1 it('should set correct index when use shiftClick', function () { 2 expect($scope.startIndex).toEqual(-1); 3 $scope.shiftClick(B); 4 expect($scope.startIndex).toEqual(B.nodeIndex); 5 $scope.shiftClick(D); 6 expect($scope.startIndex).toEqual(D.nodeIndex); 7 $scope.ctrlClick(D); 8 expect($scope.startIndex).toEqual(C.nodeIndex); 9 $scope.ctrlClick(C); 10 expect($scope.startIndex).toEqual(B.nodeIndex); 11 $scope.ctrlClick(B); 12 expect($scope.startIndex).toEqual(-1); 13 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    22. 初始項為D,按shift選B,初始項為B, ctrl點擊B,取消B,初始項變為C,ctrl點擊C,取消C,初始項變為D, ctrl點擊D,初始項變-1

    測試用例代碼

    1 it('should set correct index when use shiftClick reverse', function () { 2 expect($scope.startIndex).toEqual(-1); 3 $scope.shiftClick(D); 4 expect($scope.startIndex).toEqual(D.nodeIndex); 5 $scope.shiftClick(B); 6 expect($scope.startIndex).toEqual(B.nodeIndex); 7 $scope.ctrlClick(B); 8 expect($scope.startIndex).toEqual(C.nodeIndex); 9 $scope.ctrlClick(C); 10 expect($scope.startIndex).toEqual(D.nodeIndex); 11 $scope.ctrlClick(D); 12 expect($scope.startIndex).toEqual(-1); 13 });

    測試通過

    ?

    23. 初始項為B,shift點擊E,則取消B,只選中E,初始項相應的變為E,Ctrl點擊E,E不選中,初始項變-1

    測試用例代碼

    1 it('should not select different isEdit status while using shiftClick', function () { 2 expect($scope.startIndex).toEqual(-1); 3 $scope.shiftClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 $scope.shiftClick(E); 7 expect(B.selected).toBeFalsy(); 8 expect(E.selected).toBeTruthy(); 9 expect($scope.startIndex).toEqual(E.nodeIndex); 10 $scope.ctrlClick(E); 11 expect(B.selected).toBeFalsy(); 12 expect(E.selected).toBeFalsy(); 13 expect($scope.startIndex).toEqual(-1); 14 });

    測試失敗,修改代碼

    ?

    測試通過,重構代碼

    測試通過


    24. 初始項為B,shift點擊I,將取消B,只選中I,初始項變為I

    測試用例代碼

    1 it('should not select different isEdit status while using shiftClick 2', function () { 2 expect($scope.startIndex).toEqual(-1); 3 $scope.shiftClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 $scope.shiftClick(I); 7 expect(B.selected).toBeFalsy(); 8 expect(I.selected).toBeTruthy(); 9 expect($scope.startIndex).toEqual(I.nodeIndex); 10 expect(_.where($scope.allNodes, { selected: true}).length).toEqual(1); 11 });

    測試通過

    ?

    25. shift點擊E,shift點擊H,將選中EGH,F未選中

    測試用例代碼

    1 it('should skip the opEnable=false item', function () { 2 $scope.shiftClick(E); 3 expect(E.selected).toBeTruthy(); 4 expect($scope.startIndex).toEqual(E.nodeIndex); 5 $scope.shiftClick(H); 6 expect(E.selected).toBeTruthy(); 7 expect(F.selected).toBeFalsy(); 8 expect(G.selected).toBeTruthy(); 9 expect(H.selected).toBeTruthy(); 10 expect($scope.startIndex).toEqual(H.nodeIndex); 11 expect(_.where($scope.allNodes, { selected: true}).length).toEqual(3); 12 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    26. shift點擊E,shift點擊H,將選中EGH,F未選中,初始項為H, ctrl點擊H, 取消H的選中狀態,初始項變為G,ctrl點擊G,取消G的選中狀態,初始項變為E

    測試用例代碼

    1 it('should have right index when skipped the opEnable=false item', function () { 2 $scope.shiftClick(E); 3 expect(E.selected).toBeTruthy(); 4 expect($scope.startIndex).toEqual(E.nodeIndex); 5 $scope.shiftClick(H); 6 expect(E.selected).toBeTruthy(); 7 expect(F.selected).toBeFalsy(); 8 expect(G.selected).toBeTruthy(); 9 expect(H.selected).toBeTruthy(); 10 expect($scope.startIndex).toEqual(H.nodeIndex); 11 expect(_.where($scope.allNodes, { selected: true}).length).toEqual(3); 12 13 $scope.ctrlClick(H); 14 expect(H.selected).toBeFalsy(); 15 expect($scope.startIndex).toEqual(G.nodeIndex); 16 $scope.ctrlClick(G); 17 expect(G.selected).toBeFalsy(); 18 expect($scope.startIndex).toEqual(E.nodeIndex); 19 });

    測試通過

    ?

    27. 若選中了BCD,切換tab,將設置回初始項為-1,取消BCD的選中狀態

    測試用例代碼

    1 it('should clear the shift selection when change the tab', function () { 2 $scope.shiftClick(B); 3 expect(B.selected).toBeTruthy(); 4 $scope.shiftClick(D); 5 expect(B.selected).toBeTruthy(); 6 expect(C.selected).toBeTruthy(); 7 expect(D.selected).toBeTruthy(); 8 $scope.selectTab("A-Shares"); 9 expect(B.selected).toBeFalsy(); 10 expect(C.selected).toBeFalsy(); 11 expect(D.selected).toBeFalsy(); 12 });

    測試通過

    ?

    28. 初始項為-1,shift點擊A,不選中A,初始項為-1

    測試用例代碼

    1 it('should remain the index -1 when shiftClick A', function () { 2 expect($scope.startIndex).toEqual(-1); 3 $scope.shiftClick(A); 4 expect($scope.startIndex).toEqual(-1); 5 });

    測試通過

    ?

    29. shift選擇B,再shift選擇D,將選中BCD,初始項變為D,若shift點擊A,則不會改變選中的BCD,初始項還是D

    測試用例代碼

    1 it('should remain currentIndex when shiftClick A', function () { 2 expect($scope.startIndex).toEqual(-1); 3 $scope.shiftClick(B); 4 expect(B.selected).toBeTruthy(); 5 expect($scope.startIndex).toEqual(B.nodeIndex); 6 $scope.shiftClick(D); 7 expect(B.selected).toBeTruthy(); 8 expect(C.selected).toBeTruthy(); 9 expect(D.selected).toBeTruthy(); 10 expect($scope.startIndex).toEqual(D.nodeIndex); 11 $scope.shiftClick(A); 12 expect($scope.startIndex).toEqual(D.nodeIndex); 13 });

    測試通過

    ?

    30. 右鍵A,不彈出菜單

    測試用例代碼

    1 it('should show no menu when rightClick A', function () { 2 $scope.rightClick(A); 3 expect($rootScope.contextMenuStatus.isShow).toBeFalsy(); 4 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    31. 右鍵B,彈出菜單1,目標項為B

    測試用例代碼

    1 it('should show menu 1 when rightClick B', function () { 2 $scope.rightClick(B); 3 expect($rootScope.contextMenuStatus.isShow).toBeTruthy(); 4 expect($rootScope.contextMenuStatus.menuCode).toEqual(1); 5 expect($scope.targetNodes[0]).toBe(B); 6 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    32. 右鍵E,彈出菜單2,目標項為E

    測試用例代碼

    1 it('should show menu 2 when rightClick E', function () { 2 $scope.rightClick(E); 3 expect($rootScope.contextMenuStatus.isShow).toBeTruthy(); 4 expect($rootScope.contextMenuStatus.menuCode).toEqual(2); 5 expect($scope.targetNodes[0]).toBe(E); 6 });

    測試通過

    ?

    33. Ctrl點擊BCD,右鍵B,彈出菜單1,目標項為BCD

    測試用例代碼

    1 it('should show menu 1 and target is BCD when rightClick BCD', function () { 2 $scope.shiftClick(B); 3 $scope.shiftClick(D); 4 $scope.rightClick(B); 5 expect($rootScope.contextMenuStatus.isShow).toBeTruthy(); 6 expect($rootScope.contextMenuStatus.menuCode).toEqual(1); 7 expect($scope.targetNodes.length).toEqual(3); 8 expect($scope.targetNodes[0]).toBe(B); 9 expect($scope.targetNodes[1]).toBe(C); 10 expect($scope.targetNodes[2]).toBe(D); 11 });

    測試失敗,修改代碼

    ?

    測試通過

    ?

    34. Ctrl點擊BCD,右鍵E,彈出菜單2,目標項為E

    測試用例代碼

    1 it('should show menu 2 when rightClick E even if BCD is selected', function () { 2 $scope.shiftClick(B); 3 $scope.shiftClick(D); 4 $scope.rightClick(E); 5 expect($rootScope.contextMenuStatus.isShow).toBeTruthy(); 6 expect($rootScope.contextMenuStatus.menuCode).toEqual(2); 7 expect($scope.targetNodes[0]).toBe(E); 8 });

    測試通過

    ?

    35. Ctrl點擊BCD,右鍵A,不彈出菜單

    測試用例代碼

    1 it('should show no menu when rightClick A even if BCD is selected', function () { 2 $scope.shiftClick(B); 3 $scope.shiftClick(D); 4 $scope.rightClick(A); 5 expect($rootScope.contextMenuStatus.isShow).toBeFalsy(); 6 });

    測試通過

    轉載于:https://www.cnblogs.com/nickppa/p/5406600.html

    總結

    以上是生活随笔為你收集整理的基于Angularjs+jasmine+karma的测试驱动开发(TDD)实例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: xxxx69视频| 色香蕉网 | 2022av视频| 欧美色综合 | 超碰在线a | 加勒比不卡视频 | 国产精品一区二区三区四区在线观看 | 国产精品白嫩极品美女 | 欧美高清视频一区二区三区 | 亚洲午夜精品视频 | 申鹤乳液狂飙 | 91精品国产色综合久久不卡98 | 在线精品视频播放 | 久久久一区二区三区 | 免费看片黄色 | av鲁丝一区二区鲁丝 | 国产精品福利一区二区 | 国内性爱视频 | 悠悠色综合| 韩国伦理片在线看 | 国产精品久久久久久中文字 | 五月天堂网 | 日本熟妇浓毛 | 天堂av免费在线 | 国产精品一级黄色片 | 性高潮久久久久久久久 | 春色激情 | 免费在线看黄视频 | 精品久久久久久久久久岛国gif | 日韩在线免费视频 | 精品视频无码一区二区三区 | 中文字幕亚洲综合 | 欧美日韩国产一区二区在线观看 | 欧美一级片免费看 | 夏目彩春娇喘呻吟高潮迭起 | 久久密av | 亚洲一区二区黄 | 波多野结衣免费在线视频 | 91久久久久久久 | 精品动漫3d一区二区三区免费版 | 亚洲欧美日本一区二区三区 | 五月激情综合婷婷 | 91亚洲精 | 国产精品视频99 | 在线天堂6 | 日本高清视频在线 | 欧美性受xxx | 日本韩国欧美 | 日b影院| 亚洲天堂男人的天堂 | 久久男女视频 | 中文字幕麻豆 | 手机看片1024欧美 | 黑色丝袜吻戏亲胸摸腿 | 欧美日韩在线观看一区 | 日韩中文字幕亚洲精品欧美 | 国产成人精 | 亚洲三级影院 | 日本黄色一级视频 | 亚洲国产无线乱码在线观看 | 亚洲国产成人精品激情在线 | 传媒视频在线观看 | av图区| 奇米在线观看 | 93久久精品日日躁夜夜躁欧美 | 天天色视频 | 欧美成人综合视频 | 日韩爱爱免费视频 | 黄在线观看 | 日本免费一区二区三区视频 | 东京热一区二区三区四区 | 国产精品免费精品一区 | 国产成人av在线播放 | 中国少妇无码专区 | 精品国产一区二区三区性色av | 国产精品国产三级国产专区53 | 美女视频黄频视频大全 | 999精品视频 | 草久影院| 九九热在线免费观看 | 欧美无吗 | 无码国产精品一区二区色情男同 | 物业福利视频 | 国产农村乱对白刺激视频 | 免费成人蒂法网站 | 91射| 中文字幕一区二区三区不卡 | 青青操免费 | 永久免费在线 | 蜜桃视频在线观看污 | 久久综合桃花网 | 99热这里只有精品首页 | 国产精品美女久久 | 99精品视频在线观看免费 | 久久久久国产精品人妻 | 欧美啪啪一区二区 | 中文字幕在线观看视频免费 | 99热偷拍 | 久久无码精品丰满人妻 |