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

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

  • <strong id="5koa6"></strong>
  • Nodejs 的測試方法

    發表于:2016-07-07來源:推酷作者: Hello Qeesung點擊數: 標簽:Nodejs
    寫 Nodejs 也有幾個月了,但是一直都沒有關注過 Nodejs 的自動化測試。之前在學習 Java Swing 的時候,也研究過幾個不同的 GUI 自動化測試框架,比如: Abbot ,可以實現自動化點擊界

    本文是對眾多博客的學習和總結,可能存在理解錯誤。請帶著懷疑的眼光,同時如果有錯誤希望能指出。

    Nodejs 測試(1)

    寫 Nodejs 也有幾個月了,但是一直都沒有關注過 Nodejs 的自動化測試。之前在學習 Java Swing 的時候,也研究過幾個不同的 GUI 自動化測試框架,比如:

    • Abbot ,可以實現自動化點擊界面上的按鈕等操作,主要是通過代碼來實現;
    • AutoIT ,可以將對一個軟件的操作錄制下來,然后存為腳本,一次錄制,多次運行。

    這兩天在看某些開源項目的時候,比如 Angular-dashboard-framework 和Angular-meterial-dashboard ,發現都使用了一些自動化測試的框架來進行軟件的測試,比如: Mocha , Jasmine 等等。

    Nodejs 中的自動化測試框架很多,我們不能一一涉獵,我們會選取比較常見的幾個來使用。

    在開始我們的主題之前,我們會介紹測試中的幾個簡單的概念,然后再看一個簡單的例子

    TDD 與 BDD

    TDD , 測試驅動開發 (Test-Driven Development) , BDD , 行為驅動開發(Behavior-Driven Development) .

    所謂的 測試驅動開發 ,就是在開發之前,先編寫一些測試,然后跑一遍測試(此時的結果肯定是全都不通過的),然后開發進行開發,再跑一遍測試,如果測試都通過了,那么表示測試通過。

    那么 行為驅動開發 ,就是采用自然語言來描述測試的行為過程。 BDD 可以消除TDD 測試過程中不能發現的問題。

    TDD 和 BDD 是一個復雜的話題,大家可以參考下面的文章:

    斷言(Assert)

    斷言在 Nodejs 軟件測試過程中很是重要。 Nodejs 就默認提供了內置的斷言庫assert ,后面我們將要介紹的斷言庫都是基于 Nodejs 內置的斷言庫,比如大名鼎鼎的 shouold.js , chai , expect.js 等等。

    斷言庫提供了很多語義化的方法來對值進行各種判斷。相對于內置的斷言庫而言,should.js 等斷言庫提供了更為自然,更為豐富的判斷方法。

    測試框架(Test Framework)

    目前博主接觸的自動化測試框架主要是 Mocha 和 Jasmine 這兩個。測試框架并不負責斷言的判斷,斷言編寫,它們只是才有一種更為合理整潔的方式來管理我們的斷言。這就為我們使用自動化測試框架帶來了很大的靈活性,比如在使用 Mocha 自動化測試框架的時候,博主決定采用 nodejs 內置的 assert 斷言庫來編寫斷言。不久之后,博主新學習了 should.js ,于是決定將之前用 assert 斷言庫寫的測試全部用should.js 替換,這也是可以的。因為 should.js , chai 等斷言庫都是基于nodejs 內置的 assert 斷言庫的。

    例子

    首先創建一個工程

    # create a new nodejs project
    $ cd ~/desktop && mkdir nodejs-test
    $ cd $_ && npm init
    
    # enter some infomation here
    
    # install some dependecies
    $ npm install -g mocha
    $ npm install --save-dev should
    

    這時我們目錄下就有一個 package.json 文件,然后新建一個 lib 目錄,并在lib 目錄中創建一個 math.js 文件,作為我們自己實現的模塊。

    # create lib and math module
    $ mkdir lib && cd lib
    $ emacs math.js
    

    math.js 模塊內容如下,并最后導入 add 函數, add 函數就是我們最后要測試的函數

    /**
     *  add numbers
     */
    function add(number1 , number2){  
        if(arguments && arguments.length  === 0)
            return null;
        var numbers = Array.from(arguments);
        var result = 0;
        numbers.forEach(function(number) {
            result += number;
        });
        return result;
    };
    
    
    module.exports = {  
        add:add
    };
    

    回到與 package.json 同級的根目錄,新建一個 test 目錄,然后新建 add-test.js 文件

    $ cd .. && mkdir test && cd test
    $ emacs add-test.js
    

    add-test.js 文件的內容如下,主要是測試 add 函數,下面的測試內容分別是:

    • 不傳入參數
    • 傳入一個參數
    • 傳入兩個參數
    • 傳入多個參數
    var should = require("should");  
    var add = require("../lib/math.js").add;  
    var assert = require("assert");
    
    describe("add test", function () {  
        describe("with no input args",function () {
            it("result should equal to null",function () {
                (add() === null).should.be.true;
            });
        });
    
        describe("add one number",function  () {
            it("result should equal to the number",function () {
                add(1).should.equal(1);
            });
    
        });
    
        describe("add two number",function name() {
            it("result should equal to the number1+ number2",function () {
                add(1,2).should.equal(3);
            });
        });
    
    
        describe("add numbers",function name() {
            it("result should equal to number1+ number2 + ...",function () {
                add(1,2,3,4).should.equal(10);
            });
        });
    });
    

    回到工程跟目錄,執行一下, mocha ,我們就可以看到下面的結果:

    ~/Desktop/nodejs-test $ mocha
    
    
      add test
        with no input args
          √ result should equal to null
        add one number
          √ result should equal to the number
        add two number
          √ result should equal to the number1+ number2
        add numbers
          √ result should equal to number1+ number2 + ...
    
    
      4 passing (8ms)
    

    我們將 add 函數中的 + 操作符換成 - ,然后再運行一遍測試,除了第一個測試,剩下的測試都拋出異常了

     add test
        with no input args
          √ result should equal to null
        add one number
          1) result should equal to the number
        add two number
          2) result should equal to the number1+ number2
        add numbers
          3) result should equal to number1+ number2 + ...
    
    
      1 passing (10ms)
      3 failing
    
      1) add test add one number result should equal to the number:
    
          AssertionError: expected -1 to be 1
          + expected - actual
    
          --1
          +1
    
          at Assertion.fail (C:\Users\qeesung\Desktop\nodejs-test\node_modules\should\cjs\should.js:326:17)
          at Assertion.Object.defineProperty.value (C:\Users\qeesung\Desktop\nodejs-test\node_modules\should\cjs\should.js:398:19)
          at Context.<anonymous> (C:\Users\qeesung\Desktop\nodejs-test\test\add-test.js:14:27)
          ... more error here
    
     

    原文轉自:http://www.tuicool.com/articles/QVvY7jm

    老湿亚洲永久精品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>