Mocha:事件发生后如何断言?
Mocha: How to assert after an event?
我正在与 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 但它只是在断言失败之后才被调用。
典型的方法是将 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);
});
我正在与 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 但它只是在断言失败之后才被调用。
典型的方法是将 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);
});