Javascript mock.verify()不';t测试失败-如果从Promise回调调用
这个问题与这里的问题非常相似: 我将使用相同的示例:Javascript mock.verify()不';t测试失败-如果从Promise回调调用,javascript,es6-promise,sinon,Javascript,Es6 Promise,Sinon,这个问题与这里的问题非常相似: 我将使用相同的示例: it("test case 100", () => { return getPromiseA().then((A1) => { const mock1 = sinon.mock(MyObject); mock1.expects("someMethod").twice(); A1.getPromiseB("1234").then((response) => {
it("test case 100", () => {
return getPromiseA().then((A1) => {
const mock1 = sinon.mock(MyObject);
mock1.expects("someMethod").twice();
A1.getPromiseB("1234").then((response) => {
mock1.restore();
mock1.verify();
}).catch((error) => {
console.log("+++--- (Error) END of testCase +++++");
}
}, (rejectedP) => {
}).catch((err) => {
console.log("-------- (REJ-C) END of testCase ++++");
});
});
代码行:mock1.expected(“someMethod”).tweep()当mock1.verify()时,code>应失败代码>
被称为。
在正常情况下,mock1.verify()代码>将引发异常,测试用例将失败
但是在上面的例子中,测试用例并没有失败。
浏览器控制台中发布了一个错误-就是这样
解决方法是测试用例失败。
有什么想法吗?明白了,使用连锁承诺时可能会有点混乱。以下是可以做的事情:
it("test case 100", () => {
let mock1 = null;
return getPromiseA().then((A1) => {
mock1 = sinon.mock(MyObject);
mock1.expects("someMethod").twice();
return A1.getPromiseB("1234");
}).then(() => {
// response from "A1.getPromiseB"
mock1.restore();
mock1.verify();
});
// No need for catch, since the error will be caught and reported as failure by Sinon.
});
这解决了我所面临的问题。我对Sinon不太了解,但一般来说,异步操作会导致测试在异步功能解决之前完成,这是您的问题。也许这一页能帮上忙