關於promise 的測試用例編寫

前言

Promise的狀態轉化,並非難以理解的概念。可是,在寫測試用例的時候,可能會掉進坑裏。此處爲我的記錄。git

代碼解析

var should = require('should');

describe('promise assert', function () {
    it('normal assert', function (done) {
        var first = Promise.resolve('A');
        first.then(function(value) {
            value.should.equal('A');
            done():
        })
    });

    it('timeout assert', function (done) {
        var first = Promise.resolve('A');
        first.then(function(value) {
            value.should.equal('AB');
            done();
        })
    });
});

上述爲最開始寫的測試用例,理所固然的覺得第一個pass,第二個fail。結果是第一個pass,第二個timeout error。因爲暫時性短路,沒有發現問題所在,後在repo詢問後得知結果。github

每個斷言,失敗後會throw error,不會繼續往下執行,而後then方法會返回一個rejected promise,於是done方法不會被調用,因此會出現timeout errorpromise

詢問以後,mocha最新版本已經支持基於promise的斷言,而再也不依賴done回調函數。代碼修改以下:函數

var should = require('should');

describe('promise assert', function () {
    it('normal assert', function () {
        var first = Promise.resolve('A');
        return first.then(function(value) {
            value.should.equal('A');
        })
    });

    it('timeout assert', function () {
        var first = Promise.resolve('A');
        return first.then(function(value) {
            value.should.equal('AB');
        })
    });
});

此時,斷言結果如預期。測試

聯繫方式

QQ:491229492
https://github.com/bornkillerui

相關文章
相關標籤/搜索