2014-09-27 46 views
1

我正在爲我的自定義requirejs加載器編寫測試。在格式錯誤的輸入上,它應該會引發錯誤。AssertionError:在使用摩卡測試異步requirejs調用時缺少期望的異常

我使用mocha和滑動node-assert來測試它是這樣的:

AssertionError: Missing expected exception (SyntaxError)..

據我瞭解reading the docs on assert我的語法應確定:

it('throws a SyntaxError on malformed input', function(done){ 
    assert.throws(function(){ requirejs(['myLoader!malformedInput'], Function.prototype) }, SyntaxError); 
    done(); 
}); 

由於測試失敗。錯誤信息也有點難以理解。

我最好的猜測是,這是因爲requirejs調用是異步的,但在這種情況下我不知道何時調用done

或者我誤解了requirejs會處理我傳遞給onload.error(e)的錯誤?

回答

4

assert.throws不適用於異步引發的異常。以下是如何它可以使用一個RequireJS errback可工作的一個示例:

var assert = require("assert"); 
var requirejs = require("requirejs"); 

requirejs.config({ 
    baseUrl: ".", 
}); 

it('throws a SyntaxError on malformed input', function (done){ 
    requirejs(['fail'], function (fail) { 
     // This should not be called. 
     throw new Error("We were expecting a failure but none occurred!"); 
    }, function (err) { 
     assert(err.originalError instanceof SyntaxError, 
       "We should get a SyntaxError."); 
     done(); 
    }); 
}); 

fail.js文件應包含無意義的代碼(即,其產生SyntaxError)。傳遞給requirejs的第二個函數是加載失敗時調用的errback。

+0

這正是我最終解決這個問題的方式,謝謝! – m90 2014-09-29 13:34:34

+0

@Louis。謝謝,雖然我不使用RequireJS。想知道爲什麼測試模式與異步/等待失敗。看到了這一點,並能夠理解。這是我如何與異步/等待。請讓我知道,如果測試正在通過,是否正確執行? '嘗試await user.save(); (err){ assert.equal(err.errors.email.message,'Invalid Email'); }' – 2017-05-01 14:17:15