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的一些相關屬性都做了註釋,下面對核心的功能點進行簡單的介紹:
首先任何一個測試用例以describe函式來定義,它有兩引數,第一個用來描述測試大體的中心內容,第二個引數是一個函式,裡面寫一些真實的測試程式碼
it是用來定義單個具體測試任務,也有兩個引數,第一個用來描述測試內容,第二個引數是一個函式,裡面存放一些測試方法
expect主要用來計算一個變數或者一個表示式的值,然後用來跟期望的值比較或者做一些其它的事件
beforeEach與afterEach主要是用來在執行測試任務之前和之後做一些事情,上面的例子就是在執行之前改變變數的值,然後在執行完成之後重置變數的值
最後要說的是,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)-測試controller和service
所有文章,首發於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學習之路-集群及LVS(2)【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
深度學習cs231n之knn學習的一些記錄(2)
防止在上篇文章上的修改產生覆蓋,我這裡就直接重啟一篇。繼續寫 當前在knn.ipynb 裡面的box 15 Now implement the function. predict_labels and run the code below: 現在執行class