• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Node.js單元測試、集成測試、基準測試以及代碼覆蓋率測試方面總結

    發表于:2016-05-17來源:推酷作者:OurJS點擊數: 標簽:
    本文是最近在學習 Node.js 測試方面的總結,包括單元測試、集成測試、基準測試以及代碼覆蓋率測試等多方面的的內容。對于中大型項目,完備的測試用例有助于保證項目的持續集成

      本文是最近在學習 Node.js 測試方面的總結,包括單元測試、集成測試、基準測試以及代碼覆蓋率測試等多方面的的內容。對于中大型項目,完備的測試用例有助于保證項目的持續集成能力和代碼的健壯性。

      Unit Test

      單元測試,又稱模塊測試,針對程序中的最小執行單元進行正確性測試。常見的開發模式包括 TDD 和 BDD 兩類。

      TDD(Test-driven development,測試驅動開發),先編寫測試用例,然后針對測試用例開發模塊,當測試用例不足時,補充測試用例;當模塊無法通過測試時,持續更新模塊代碼,直到完全通過測試用例。其開發核心圍繞測試用例展開,即測試用例的完整性決定了開發模塊的健壯性和正確性,這容易由邊界條件引發單元測試覆蓋度不夠的問題。

      BDD(Behavior-driven development,行為驅動開發),用語義化的編程語言開發緊貼業務需求的測試用例,繼而驅動相關模塊的開發。

      AVA 是 JavaScript 生態中最新潮的測試框架,其內置了 Babel,可以直接使用 ES6 語法,具有輕量高效、并發執行、強制隔離等優點,安裝方法:

      npm install --save-dev ava

      設置 package.json 中的 scripts 字段:

      {

      "scripts": {

      "test": "ava",

      "test:watch": "ava --watch"

      }

      }

      運行:

      npm test

      # or

      npm test:watch

      下面是一個基本的測試代碼:

      import test from 'ava';

      const fibonacci = (n) => {

      if (n === 0 || n === 1) {

      return n;

      }

      return fibonacci(n - 1) + fibonacci(n - 2);

      }

      test('Test Fibonacci(0)', t => {

      t.is(fibonacci(0), 0);

      });

      test('Test Fibonacci(1)', t => {

      t.is(fibonacci(1), 1);

      });

      // HOOK CALLS

      test.before('Before', t => {

      console.log('before');

      });

      test.after('After', t => {

      console.log('after');

      });

      test.beforeEach('BeforeEach', t => {

      console.log(' beforeEach');

      });

      test.afterEach('AfterEach', t => {

      console.log(' afterEach');

      });

      在上面的代碼中,我們首先引入了 AVA 模塊,然后創建了待測試的 fibonacci 函數,接下來是兩個測試用例,最后是四個鉤子方法:before() / after() / beforeEach() / afterEach()。

      AVA 提供了一下修飾方法來指定測試的執行方式:

      skip() ,跳過添加了 skip() 的測試用例

      only() ,只執行添加了 only() 的測試用例

      todo() ,占位標識符,表示將來需要添加的測試用例

      serial() ,串行執行測試用例,默認情況下 AVA 會以并行的方式執行測試用例

      test('Test Fibonacci(0)', t => {

      t.is(fibonacci(0), 0);

      });

      在上面代碼回調函數中的 t ,稱為斷言執行對象,該對象包含以下方法:

      t.end() ,結束測試,只在 test.cb() 中有效

      t.plan(count) ,指定執行次數

      t.pass([message]) ,測試通過

      t.fail([message]) ,測試失敗

      t.ok(value, [message]) ,斷言 value 的值為真值

      t.notOK(value, [message]) ,斷言 value 的值為假值

      t.true(value, [message]) ,斷言 value 的值為 true

      t.false(value, [message]) ,斷言 value 的值為 false

      t.is(value, expected, [message]) ,斷言 value === expected

      t.not(value, expected, [message]) ,斷言 value !== expected

      t.same(value, expected, [message]) ,斷言 value 和 expected 深度相等

      t.notSame(value, expected, [message]) ,斷言 value 和 expected 深度不等

      t.throws(function | promise, [error, [message]]) ,斷言 function 拋出異?;?promise reject 錯誤

      t.notThrows(function | promise, [message]) ,斷言 function 不會異?;?promise resolve

      t.regex(contents, regex, [message]) ,斷言 contents 匹配 regex

      t.ifError(error, [message]) ,斷言 error 是假值

      集成測試

      相對于專注微觀模塊的單元測試,集成測試是從宏觀整體的角度發現問題,所以也稱為組裝測試和聯合測試。 Travis CI 是一款優秀的持續集成工具,可以監聽 Github 項目的更新,便于開源軟件的集成測試。使用 Travis CI 需要在項目的根目錄下創建 .travis.yml 配置文件(以 Node.js 為例):

    原文轉自: http://ourjs.com/detail/5738493888feaf2d031d24fa

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>