我正在與 Electron 和 Johnny-Five 合作處理我使用 Arduino Mega 2560 讀取的一些資料,但在測驗我的 Arduino 連接時遇到了一些問題。
這是我要測驗的方法(忽略糟糕的簽名):
export let board: Board | null = null;
export function setArduinoBoard(f: (num: number, ...etc: any[]) => void, num: number, ...etc: any[]) {
if (board == null)
board = new Board({...});
board = board.on("ready", () => f(num, etc));
}
這是我的測驗:
describe.only("setArduinoBoard()", function() {
it("can communicate with the Arduino device", function(done) {
const f = (num: number) => console.log(num);
const spy = sinon.spy(f);
setArduinoBoard(f, 0);
assert(spy.called);
done();
});
});
我想要的是斷言等到函式被呼叫。而且我知道它最終會被呼叫,因為控制臺輸出 0 但它只是在斷言失敗之后。
uj5u.com熱心網友回復:
典型的方法是將done回呼移動到事件處理程式中。這樣,測驗將一直等到回呼被呼叫。如果ready未觸發事件,則不會呼叫回呼,并且測驗將在 2 秒后超時并出現錯誤。
這意味著您不需要顯式斷言該事件f已被呼叫,事實上,您也不需要事件來監視它。
it("can communicate with the Arduino device", function(done) {
const f = (num: number) => {
console.log(num);
done();
};
setArduinoBoard(f, 0);
});
如果您需要在事件觸發后ready斷言某些內容,您可以在事件處理程式中添加斷言并使用catch塊來捕獲例外并將它們傳遞給done回呼。
it("can communicate with the Arduino device", function(done) {
const f = (num: number) => {
try {
assert.equal(num, 0);
done();
return;
} catch (err) {
done(err);
}
};
setArduinoBoard(f, 0);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449489.html
標籤:javascript 单元测试 mocha.js 诗乃 约翰尼五
下一篇:確定檔案夾是否有檔案
