前端測試-大醬的冬季前端之旅第一遊

從這周開始,每週至少完成一篇分享~每週週六睡前完成本週的初步讀文章分享,下週四睡前將上週的大問題修改完畢,將深入理解的知識補充完~必定要堅持下去~也但願本身可以深入理解每個內容,若是你們發現文章中的問題或者有好的建議可直接留言,有好的相關文章也歡迎發給我~一塊兒加油吧!javascript


1.node assert

node-assert函數分組講解
php

node中文api文檔
html

斷言是編程術語,表示爲一些布爾表達式,程序員相信在程序中的某個特定點該表達式值爲真,能夠在任什麼時候候啓用和禁用斷言驗證,所以能夠在測試時啓用斷言而在部署時禁用斷言。assert主要是用於有確定結果的測試。java

主要函數

assert(value, message), assert.ok(value, [message]) //判斷中值是否爲truenode

assert.ifError(value) //測試值是否不爲 false,當爲 true 時拋出。經常使用於回調中第一個 error 參數的檢查。git

assert.fail(actual, expected, message, operator) //拋出異常,有message時顯示  message,沒有使用operator做爲爲分隔符程序員

assert.equal(actual, expected, [message]) //("=="判斷)是否相等github

assert.notEqual(actual, expected, [message]) //("=="判斷)是否不相等正則表達式

assert.strictEqual(actual, expected, [message]) //("==="判斷)是否相等 相反:notStrictEqualshell

assert.deepEqual(actual, expected[, message]) // 是否深度匹配 

assert.notDeepEqual(actual, expected[, message]) // 是否深度匹配

assert.throws(block, [error], [message]) //聲明一個block用於拋出錯誤,'error'能夠是構造函數,驗證函數或者正則表達式

assert.doesNotThrow(block, [message])//聲明模塊不拋出錯誤

2.ATDD,TDD,BDD

ATDD,TDD,BDD的區別

單元測試,BDD,TDD

TDD(測試驅動開發)

TDD指的是Test Drive Development,很明顯的意思是測試驅動開發,也就是說咱們能夠從測試的角度來檢驗整個項目。大概的流程是先針對每一個功能點抽象出接口代碼,而後編寫單元測試代碼,接下來實現接口,運行單元測試代碼,循環此過程,直到整個單元測試都經過。這一點和敏捷開發有相似之處。

BDD(行爲驅動開發)

BDD指的是Behavior Drive Development,也就是行爲驅動開發。BDD用天然語言來描述,讓開發、測試、BA以及客戶都能在這個基礎上達成一致。由於測試優先的概念並非每一個人都能接受的,可能有人以爲系統太複雜而難以測試,有人認爲不存在的東西沒法測試。因此,咱們在這裏試圖轉換一種觀念,那即是考慮它的行爲,也就是說它應該如何運行,而後抽象出能達成共識的規範。

3.mocha(音:摩卡)

mocha是一款功能豐富的javascript單元測試框架,它既能夠運行在nodejs環境中,也能夠運行在瀏覽器環境中。mocha會串行地執行咱們編寫的測試用例,能夠在將未捕獲的異常映射到對應測試用例(?這裏是指的哪部分)的同時,保證輸出靈活準確的測試結果。

阮一峯mocha+chai(斷言庫)教程

mocha官網

mocha詳解

mocha會生成一個包在最外面的describe函數

同步代碼測試

var assert = require('chai').assert;     //斷言模塊chai中的assert風格
describe('用例集描述string', function() {    // "測試套件"test suite),表示一組相關的測試
    it('用例的描述string', function() {   //it爲一個測試用例,用例經過後會在描述前打勾
      // function爲用例的內容
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    });
});複製代碼

異步代碼測試

callback:x

describe('User', function() {
  describe('#save()', function() {
    it('should save without error', function(done) {
      var user = new User('Luna');
      user.save(function(err) {
        if (err) throw err;       //判斷用例執行成功與否是在異步代碼的回調裏邊完成的
        done();                    // 通知Mocha測試結束

        /* user.save(done);  // 異步代碼中邏輯錯誤時,會在回調中拋出一個錯誤,直接這樣寫便可 */複製代碼
});
    });
  });
});複製代碼

promise:  讓用例函數返回一個promise對象來進行正確性判斷

不建議使用箭頭函數~~

鉤子函數 (下面4種)

describe('hooks', function() {

  before('可選:描述string',function [funName可選] () {
    // runs before all tests in this block
  });

  after(function() {
    // runs after all tests in this block
  });

  beforeEach(function() {
    // runs before each test in this block
  });

  afterEach(function() {
    // runs after each test in this block
  });

  // test cases
});複製代碼

若是在用例集函數以外定義鉤子函數,那麼這個鉤子函數將會對全部的mocha單元測試用例生效。

經常使用方法

describe.only()/it.only() :  只執行此用例集或用例

describe.skip()/it.skip():跳過此用例集或用例的執行,跳過的用例會被標記爲pending的用例

 this.skip();: 調用skip函數跳過此用例

this.retries();:從新執行用例(會從新運行用例函數的beforeEach和afterEach鉤子函數)

 this.slow(num);:標記耗費num時間認爲執行耗時過長

 this.timeout(500):定義用例、用例集、鉤子函數超時時間,若是嵌套的用例集或者用例重寫了timeout時間,則會覆蓋上層的設置。經過this.timeout(0),能夠關掉用例或用例集的超時判斷。

mocha.setup('bdd'): 設置接口類型

 mocha.run(); :  測試腳本加載完以後用mocha.run()函數來運行測試

經常使用命令

mocha init: 生成一個瀏覽器中單元測試的架子

mocha --delay: 在全局環境中生成一個run函數,延遲工做完成後調用run函數run()便可啓動測試。

mocha命令的基本格式是:mocha [debug] [options] [files]

測試接口類型

mocha的測試接口類型指的是集中測試用例組織模式的選擇,包括BDD行爲驅動開發(Behavior Driven Development),TDD測試驅動開發(Test-Driven Development),Exports,QUnit 和 Require-style 幾種

BDD(默認的測試接口)

BDD測試接口提供 describe(), context(), it(), specify(), before(), after(), beforeEach(), 和 afterEach()幾種函數,其中context函數只是describe函數的別名,specify函數也是if函數的別名。

TDD

TDD接口提供 suite(), test(), suiteSetup(), suiteTeardown(), setup(), 和 teardown()函數

額外補充知識點(讀取文件時用到) :

  bash通配符(node通配符)【eg:$ mocha 'test/**/*.@(js|jsx)'  需加單引號


shell通配符

  通配符     意義

  *         匹配0任意多個字符(包括零個或一個)
  ?         匹配任意一個字符(不包括零個)
  [characters]    匹配任意一個屬於字符集中的字符
  [!characters]    匹配任意一個不是字符集中的字符
  [[:class:]]     匹配任意一個屬於指定字符類中的字符

  

   字符類         意義

  [:alnum:]      匹配任意一個字母或數字
  [:alpha:]       匹配任意一個字母
  [:digit:]       匹配任意一個數字
  [:lower:]      匹配任意一個小寫字母
  [:upper]       匹配任意一個大寫字母

4.should.js

should.js語法

api英文文檔

shouldjs是一個BDD測試斷言庫,它包裝了assert,改變了書寫風格,擴展了Object.prototype,額外提供了".should"語法。一旦引入了should,即「var should = require('should');」,那麼當前js文件內的全部繼承至Object的對象均可以.should:

目標對象.should.xxxx複製代碼

若是目標對象沒有繼承至Object,那就換一種方式使用:

should(目標對象).xxx複製代碼

或者

should.xxxxx(目標對象);複製代碼

should庫須要額外安裝:$ npm install should --save-dev

瀏覽器端將should包下的should.js引入到前臺頁面,便可和後端同樣使用。

靜態方法

should提供了一系列的靜態方法,這些方法能夠對非Object對象使用。它們和assert的基本方法實際上是同樣的。具體api看上面連接。

Assertions 斷言

每個should斷言都返回一個被should.js包裝過的對象,因此他能夠造成鏈式語法,可是有一些斷言,好比.length,.property 等將被斷言的對象改變成了其屬性值。 

並且在「鏈」中,可使用下面等方便理解的詞,這些詞其實對should的斷言一點實際影響都沒有,注意,沒有.or

.an, .of, .a, .and, .be, .have, .w ith, .is, .which.

5.自動化測試工具karma

karma的設計分析以及與其餘框架對比

Karma中文配置API

karma入門操做(yarn)

karma就是把咱們測試過程當中編寫的測試用例,經過它調用瀏覽器來運行這些測試用例,而後再聚集測試結果,生成測試報告。能夠選擇各種測試框架(mocha、Jasmine 等)。

6.Travis CI

官網

travis自動構建nodejs項目實戰

Travis-ci是一款持續集成(Continuous Integration)服務,它可以很好地與Github結合,每當代碼更新時自動地觸發集成過程。

配置.travis.yml文件,在travis官網上開啓自動構建,則能夠簡單地開始某一項目的自動構建

相關文章
相關標籤/搜索