摘要:單元測試我們可以將其分成兩類獨立多帶帶測試與測試工具集。工具集還有更多,這一切我們將在單元測試組件與指令單元測試逐一說明。那么下一篇,我們將介紹如何使用進行單元測試。
本文將探討如何搭建測試環境、以及Angular測試工具集。
測試環境絕大部分都是利用Angular Cli來創建項目,因此,默認已經集成我們所需要的npm包與腳本;當然,如果你是使用自建或官網 quickstart 的話,需要自行安裝;但所有核心數據全都是一樣的。
Angular單元測試我們可以將其分成兩類:獨立多帶帶測試與Angular測試工具集。
Pipe與Service適為獨立多帶帶測試,因為它們只需要 new 實例類即可;同樣是無法與Angular組件進行任何交互。
與之相反就是Angular測試工具集。
測試框架介紹Jasmine
Jasmine測試框架提供了編寫測試腳本的工具集,而且非常優秀的語義化,讓測試代碼看起來像是在讀一段話。
Karma
有測試腳本,還需要Karma來幫忙管理這些腳本,以便于在瀏覽器中運行。
Npm 包如果你非要折騰,那么最簡單的辦法便是通過Angular Cli創建一個新項目,然后將以下Npm包復制到您折騰的項目中。
"jasmine-core": "~2.5.2", "jasmine-spec-reporter": "~3.2.0", "karma": "~1.4.1", "karma-chrome-launcher": "~2.1.1", "karma-cli": "~1.0.1", "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "karma-coverage-istanbul-reporter": "^0.2.0"
那么,我們重要還是看配置腳本部分。
配置腳本我們核心是需要讓 karma 運行器運行起來,而對于 Jasmine,是在我們編寫測試腳本時才會使用到,因此,暫時無須過度關心。
我們需要在根目錄創建 karma.conf.js 文件,這相當于一些約定。文件是為了告知karma需要啟用哪些插件、加載哪些測試腳本、需要哪些測試瀏覽器環境、測試報告通知方式、日志等等。
karma.conf.js
以下是Angular Cli默認提供的 karma 配置文件:
// Karma configuration file, see link for more information // https://karma-runner.github.io/0.13/config/configuration-file.html module.exports = function(config) { config.set({ // 基礎路徑(適用file、exclude屬性) basePath: "", // 測試框架,@angular/cli 指Angular測試工具集 frameworks: ["jasmine", "@angular/cli"], // 加載插件清單 plugins: [ require("karma-jasmine"), require("karma-chrome-launcher"), require("karma-jasmine-html-reporter"), require("karma-coverage-istanbul-reporter"), require("@angular/cli/plugins/karma") ], client: { // 當測試運行完成后是否清除上文 clearContext: false // leave Jasmine Spec Runner output visible in browser }, // 哪些文件需要被瀏覽器加載,后面會專門介紹 `test.ts` files: [ { pattern: "./src/test.ts", watched: false } ], // 允許文件到達瀏覽器之前進行一些預處理操作 // 非常豐富的預處理器:https://www.npmjs.com/browse/keyword/karma-preprocessor preprocessors: { "./src/test.ts": ["@angular/cli"] }, // 指定請求文件MIME類型 mime: { "text/x-typescript": ["ts", "tsx"] }, // 插件【karma-coverage-istanbul-reporter】的配置項 coverageIstanbulReporter: { // 覆蓋率報告方式 reports: ["html", "lcovonly"], fixWebpackSourcePaths: true }, // 指定angular cli環境 angularCli: { environment: "dev" }, // 測試結果報告方式 reporters: config.angularCli && config.angularCli.codeCoverage ? ["progress", "coverage-istanbul"] : ["progress", "kjhtml"], port: 9876, colors: true, // 日志等級 logLevel: config.LOG_INFO, // 是否監聽測試文件 autoWatch: true, // 測試瀏覽器列表 browsers: ["Chrome"], // 持續集成模式,true:表示瀏覽器執行測試后退出 singleRun: false }); };
以上配置基本上可以滿足我們的需求;一般需要變動的,我想是測試瀏覽器列表了,因為karma支持所有市面上的瀏覽器。另外,當你使用 Travis CI 持續集成時,啟動一個禁用沙箱環境Chrome瀏覽器會讓我們少了很多事:
customLaunchers: { Chrome_travis_ci: { base: "Chrome", flags: ["--no-sandbox"] } }
有關karma config文件的所有信息,請參與官網文檔。
test.ts
在編寫 karma.conf.js 時,我們配置過瀏覽器加載的文件指向的是 ./src/test.ts 文件。作用是為了引導 karma 啟動,代碼也簡單許多:
// This file is required by karma.conf.js and loads recursively all the .spec and framework files import "zone.js/dist/long-stack-trace-zone"; import "zone.js/dist/proxy.js"; import "zone.js/dist/sync-test"; import "zone.js/dist/jasmine-patch"; import "zone.js/dist/async-test"; import "zone.js/dist/fake-async-test"; import { getTestBed } from "@angular/core/testing"; import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from "@angular/platform-browser-dynamic/testing"; // Unfortunately there"s no typing for the `__karma__` variable. Just declare it as any. declare var __karma__: any; declare var require: any; // Prevent Karma from running prematurely. __karma__.loaded = function () {}; // First, initialize the Angular testing environment. getTestBed().initTestEnvironment( BrowserDynamicTestingModule, platformBrowserDynamicTesting() ); // Then we find all the tests. // 所有.spec.ts文件 const context = require.context("./", true, /.spec.ts$/); // And load the modules. context.keys().map(context); // Finally, start Karma to run the tests. __karma__.start();
一切就緒后,我們可以嘗試啟動 karma 試一下,哪怕無任何測試代碼,也是可以運行的。
如果是Angular Cli那么 ng test。折騰的用 node "./node_modules/karma-cli/bin/karma" start
最后,打開瀏覽器:http://localhost:9876,可以查看測試報告。
簡單示例既然環境搭好,那么我們來寫個簡單示例試一下。
創建 ./src/demo.spec.ts 文件。.spec.ts為后綴這是一個約定,遵守它。
describe("demo test", () => { it("should be true", () => { expect(true).toBe(true); }) });
運行 ng test 后,我們可以在控制臺看到:
Chrome 58.0.3029 (Windows 10 0.0.0): Executed 1 of 1 SUCCESS (0.031 secs / 0.002 secs)
或者瀏覽器:
1 spec, 0 failures demo test true is true
不管怎么樣,畢竟我們已經進入Angular單元測試的世界了。
Angular測試工具集普通類諸如Pipe或Service,只需要通過簡單的 new 創建實例。而對于指令、組件而言,需要一定的環境。這是因為Angular的模塊概念,要想組件能運行,首先得有一個 @NgModule 定義。
工具集的信息量并不很多,你很容易可以掌握它。下面我簡略說明幾個最常用的:
TestBed
TestBed 就是Angular測試工具集提供的用于構建一個 @NgModule 測試環境模塊。當然有了模塊,還需要利用 TestBed.createComponent 創建一個用于測試目標組件的測試組件。
異步
Angular到處都是異步,而異步測試可以利用工具集中 async、fakeAsync 編寫優雅測試代碼看著是同步。
工具集還有更多,這一切我們將在[Angular單元測試-組件與指令單元測試]()逐一說明。
那么下一篇,我們將介紹如何使用Jasmine進行Angular單元測試。
happy coding!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/87039.html
摘要:整個系列差不多涵蓋或滿足日常單元測試開發所需的知識,當然,像前面說的,你也認同單元測試的重要性,否則看這系列并無任何意義因為,我并不描述任何有關于開發技巧。 Angular單元測試在所有前端框架當中不要太爽了,但是要全面說好它,還真需要很長的篇幅,因為各種測試方式就如同在寫一份Angular入門級開發一樣。因此,我打算使用一個系列來說明。 當然,一切的前提是,你同我一樣認同單元測試的重...
摘要:四結論本章幾乎所有的內容在單元測試經常使用到的東西特別是異步部分,三種不同異步方式并非共存的,而是需要根據具體業務而采用。否則,你會發現真難寫單元測試。自此,我們算是為寫單元測試打下了基礎。 以下是我假定那些極少或壓根沒寫單元測試的人準備的,因此,會白話解釋諸多概念性問題,同時會結合 Jasmine 與之對應的方法進行講解。 一、概念 Test Suite 測試套件,哪怕一個簡單的類,...
摘要:簡介模塊為單元測試提供模塊定義加載注入等支持。為使用了的應用提供單元測試的偽后臺。根據提示進行設置即可。將該文件保存為,測試時需按順序將測試項目文件及依賴文件引入。最后在請求后執行就會立即執行完成請求。參考官方單元測試學習筆記 Angular-mock簡介 Angular-mock模塊為angular單元測試提供模塊定義、加載、注入等支持。輔助Karma、Jasmine等JS測試工具來...
摘要:前端每周清單第期現狀分析與優化策略單元測試爬蟲作者王下邀月熊編輯徐川前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點分為新聞熱點開發教程工程實踐深度閱讀開源項目巔峰人生等欄目。 showImg(https://segmentfault.com/img/remote/1460000011008022); 前端每周清單第 29 期:Web 現狀分析與優化策略...
摘要:感謝王下邀月熊分享的前端每周清單,為方便大家閱讀,特整理一份索引。王下邀月熊大大也于年月日整理了自己的前端每周清單系列,并以年月為單位進行分類,具體內容看這里前端每周清單年度總結與盤點。 感謝 王下邀月熊_Chevalier 分享的前端每周清單,為方便大家閱讀,特整理一份索引。 王下邀月熊大大也于 2018 年 3 月 31 日整理了自己的前端每周清單系列,并以年/月為單位進行分類,具...
閱讀 3411·2021-11-24 10:30
閱讀 3283·2021-11-22 15:29
閱讀 3715·2021-10-28 09:32
閱讀 1290·2021-09-07 10:22
閱讀 3347·2019-08-30 15:55
閱讀 3632·2019-08-30 15:54
閱讀 3511·2019-08-30 15:54
閱讀 2843·2019-08-30 15:44