1. 程式人生 > >ionic之如何應用karma進行單元測試(2)-測試controller和service

ionic之如何應用karma進行單元測試(2)-測試controller和service

所有文章,首發於CSDN-檸檬加冰部落格

測試controller和service準備工作

準備工作

專案搭建

你已經按照上一篇文章,建立了ionic-tests工程,並在工程中載入了karma測試用例,完成了專案搭建、測試工作。

開始測試

理解karma和jasmine

Jasmine is a behavior-driven development framework for testing JavaScript code. It does not depend on any other JavaScript frameworks. It does
not require a DOM. And it has a clean, obvious syntax so that you can easily write tests.

jasmine是一個行為驅動開發的測試框架,不依賴任何js框架以及dom,是一個非常乾淨以及友好API的測試庫.

下面簡單的以一個例子來說明它的用法

在之前建立的controller.test.js中,增加下面的程式碼

//最簡單的karma測試
describe("A spec (with setup and tear-down)", function () {
  var foo;
  //在測試用例執行前載入
beforeEach(function () { foo = 0; foo += 1; }); //在測試用例執行後加載 afterEach(function () { foo = 0; }); //測試用例 it("is just a function, so it can contain any code", function () { //expect括號中是需要測試的函式,或是變數 //toEqual括號中是期望的函式返回值或是變數值 expect(foo).toEqual(1); }); //測試用例--單個測試用例中,可以增加多個測試項
it("can have more than one expectation", function () { expect(foo).toEqual(1); expect(true).toEqual(true); }); });

程式碼中,基本上把jasmineAPI的一些相關屬性都做了註釋,下面對核心的功能點進行簡單的介紹:

  1. 首先任何一個測試用例以describe函式來定義,它有兩引數,第一個用來描述測試大體的中心內容,第二個引數是一個函式,裡面寫一些真實的測試程式碼

  2. it是用來定義單個具體測試任務,也有兩個引數,第一個用來描述測試內容,第二個引數是一個函式,裡面存放一些測試方法

  3. expect主要用來計算一個變數或者一個表示式的值,然後用來跟期望的值比較或者做一些其它的事件

  4. beforeEach與afterEach主要是用來在執行測試任務之前和之後做一些事情,上面的例子就是在執行之前改變變數的值,然後在執行完成之後重置變數的值

  5. 最後要說的是,describe函式裡的作用域跟普通JS一樣都是可以在裡面的子函式裡訪問的,就像上面的it訪問foo變數

測試controllers裡面的變數和函式

新增程式碼

在controller.test.js中,加入下面的程式碼

//ng controller的單元測試
describe('test ng controller', function () {
  //設定測試用例的變數
  //作用域包括整個用例
  var scope;
  var chatsServiceMock;

  //載入controller
  beforeEach(module('starter.controllers'));
  //因為controller中注入了services的模組,所以也要載入services模組
  beforeEach(module('starter.services'));
  //將所需模組注入到測試用例中
  beforeEach(inject(function ($rootScope, $controller, _Chats_) {
    scope = $rootScope.$new();
    chatsServiceMock = _Chats_;
    $controller('ChatsCtrl', {$scope: scope, Chats: _Chats_});
  }));
  //以下為測試用例
  it('should have scopeMock defined', function () {
    expect(scope).toBeDefined();
  });

  it('should get an instance of ChatsService', function () {
    expect(chatsServiceMock).toBeDefined();
  });
  //測試remove功能,該功能的需求是,
  // 原有5條資訊,執行完功能函式後,
  // services儲存的資料和controller陣列中儲存的資料減1,變為4
  it('should delete a person in chats', function () {
    var chat = {
      id: 0,
      name: 'Ben Sparrow',
      lastText: 'You on your way?',
      face: 'img/ben.png'
    };
    scope.remove(chat);
    expect(chatsServiceMock.all().length).toBe(4);
    expect(scope.chats.length).toBe(4);
  });
});

具體的解釋,可以參考裡面的註釋,自我感覺寫的已經比較清楚了,有不明白的地方可以留言交流。

karma測試

karma start tests/my.conf.js

測試services

新增程式碼

describe('Chats Unit Tests', function(){
  var Chats;
  beforeEach(module('starter.services'));

  beforeEach(inject(function (_Chats_) {
    Chats = _Chats_;
  }));

  it('can get an instance of my factory', inject(function(Chats) {
    expect(Chats).toBeDefined();
  }));

  it('has 5 chats', inject(function(Chats) {
    expect(Chats.all().length).toEqual(5);
  }));

  it('has Max as friend with id 1', inject(function(Chats) {
    var oneFriend = {
      id: 1,
      name: 'Max Lynx',
      notes: 'Hey, it\'s me',
      face: 'img/max.png'
    };

    expect(Chats.get(1).name).toEqual(oneFriend.name);
  }));
});

karma測試

karma start tests/my.conf.js

相關推薦

ionic如何應用karma進行單元測試2-測試controllerservice

所有文章,首發於CSDN-檸檬加冰部落格 測試controller和service準備工作 準備工作 專案搭建 你已經按照上一篇文章,建立了ionic-tests工程,並在工程中載入

tensorflow學習筆記使用tensorflow進行MNIST分類2

接著上一篇:http://blog.csdn.net/IEEE_FELLOW/article/details/53012351 本文參考Yann LeCun的LeNet5經典架構,稍加ps得到下面適用於本手寫識別的cnn結構,構造一個兩層卷積神經網路,神經網路的結構如下圖

基於python語言的selenium自動化測試2-測試程式碼與指令碼程式碼分離

上一篇介紹瞭如何搭建selenium環境,也給出了一小段程式碼演示如何使用selenium 部落格不會過多的介紹如何使用selenium api 更多地在於如何構建一個自動化測試專案, 程式碼的分層是很關鍵一步,本文介紹如何使用pytest+selenium

Robot Framework接口測試2--http請求get

pci frame font urllib status pac 只需要 install height 本來打算把http發送請求的get和post方法都介紹一下的,結果發現篇幅有點長,文本編輯也變得混亂,所以這裏先介紹一下get方法,下一次再post。其實這些方法大家

WEB測試2--WEB核心技術WEB工作過程---URL

class wpa quest www. gpo 類型 pos item src web工作過程,首先談到url地址解析。如下圖:包括5個部分 1.協議類型 https 2.主機名 www.zhihu.com (通過DNS解析出主機名) 3.端口號 圖中端口號為443

tensorflow學習筆記使用tensorflow進行MNIST分類3

在載入MNIST資料集時候用到了Input_data.py。這段程式碼其實非常重要,現在和大家一起分享一下我的學習理解 #coding=utf-8 #input_data.py的詳解 #學習讀取資料檔案的方法,以便讀取自己需要的資料庫檔案(二進位制檔案) """Funct

evpp效能測試2: 與Boost.Asio進行吞吐量對比測試

簡介 Boost.Asio是用於網路和低層IO程式設計的跨平臺C++庫,為開發者提供了C++環境下穩定的非同步程式設計模型。也是業內公認的優秀的C++網路庫代表。一般來講,其他的網路庫的效能如果不能與asio做一下全面的對比和評測,就不能令人信服。 本次測試

soapui接口性能測試---- 輸出報告統計

color table repo line src testin edi set diag 好的,您已經運行了LoadTest,現在需要創建一些報告或導出收集的數據以進行更詳細的分析。有幾個選項可供您使用,我們將按順序查看:導出統計表的數據(僅限開源)。從統計圖導出數據。在

9.12測試——測試

when art pos ont ng- 安全 clas track 計劃 怎樣測試一支筆 首先。確定Who/What/When/Where/Why/How。 然後。確定測試的計劃: 事實核查 預期用途 安全性 非預期用途 9.1

樹莓派進階路 (032) -字符問題2 - 用c語言怎樣得到一個漢字的GB2312編碼(轉)

十六進制 字符串 c++ gb2 十進制 轉換 tails 表示 blog C/C++支持的是ASCII,不過漢字編碼中,GB2312與ASCII是兼容的,所以可以在C中獲得漢字的GB2312編碼 GB2312是兩個字節的,第一字節是高八位,第二字節是低八位,比如下面的程序

Linux學習路-集群及LVS2【25】---20180217

ipvs 靜態 動態算法 一、ipvs scheduleripvs scheduler:根據其調度時是否考慮各RS當前的負載狀態有兩種方法:靜態方法和動態方法1、靜態方法僅根據算法本身進行調度1、RR:roundrobin,輪詢2、WRR:Weighted RR,加權輪詢3、SH:Source H

python文件的讀寫2

import 文件讀寫 哈哈 進入 imp std 技術 都是 繼續 小R昨天因為在研究weblogic的漏洞就沒來得及學習python(好吧,這都是借口,懶了,大家可不能像我這樣。要堅持每天都學)。 這個進度是有點慢呀。哎呀,沒事沒事,我還年輕,才20歲。 哈哈,玩

《Linux學習並不難》Linux字符界面2:關閉重啟Linux系統shutdown命令

Linux shutdown 關機 3.2 《Linux學習並不難》Linux字符界面(2):關閉和重啟Linux系統之shutdown命令shutdown命令可以安全地關閉或重啟Linux系統,有些用戶會使用直接斷掉電源的方式來關閉計算機,這是十分危險的。Linux系統與Windows不同,其

scala成長2對象

ascii int 紅色 部分 類名 基類 req 字面量 標識符 scala提供了一種特殊的定義單例的方法:object關鍵字 scala> object Shabi{ | val age = 0 | val name = "shabi"

Python網絡爬蟲實戰案例:7000本電子書下載2

3.2 pytho oss 部署 .html http term ext 開發環境安裝 一、前言 本文是《Python開發實戰案例之網絡爬蟲》的第二部分:7000本電子書下載網絡爬蟲開發環境安裝部署。配套視頻課程詳見51CTO學院。 二、章節目錄 (1)Python開發環境

shell多線程進程間通信2

操作系統 依次 echo 圖片 tmp end 進行 自己的 linu 工作中往往遇到這種情況,有許多任務,依次執行比較浪費時間,由於任務之間有依賴關系,簡單的並發執行又不行。 就如同下面這種情況,任務new和dvidUser是可以並發執行的,fact任務依賴於new任務,

python的學習路===小白學程式設計2

11月9日 資料庫架構,資料庫設計花的時間有點多,貌似想多了的緣故。 回頭看一下自己的目標,是想通過這個增加對python熟悉程度,提高學習興趣,掌握和了解使用python程式設計的方法。 而實際上至少目前而言自己還是不具備直接考慮程式設計的能力的。所以一切以簡單為主。 那

jmeter介面效能測試2----效能測試全過程

依然使用上一篇文章的介面 在上一篇文章我們已經添加了http請求、斷言、檢視結果樹。在開始之前我們在新增聚合報告(執行緒組》新增》監聽器》聚合報告)。 除錯好介面後開始執行效能測試 1.設定執行緒組:根據實際需要設定 1. 執行緒數:虛擬使用者數。一個虛擬使用者佔用一個程序或執

C# wpf StackPanel控制元件Border 控制元件 進行基本佈局2

1新建一個wpf 程式,去掉grid,控制元件,新增StackPanel控制元件,在新增4個button按鈕,如下圖所示, 分析程式碼,Orientation有2個屬性,1個屬性是Vertical 代表是縱向排列。HorizontalAlignment 代表縱向排列位置,有4個屬性,l

深度學習cs231nknn學習的一些記錄2

防止在上篇文章上的修改產生覆蓋,我這裡就直接重啟一篇。繼續寫 當前在knn.ipynb 裡面的box 15 Now implement the function. predict_labels and run the code below: 現在執行class