我在测试中拥有此before
函数:
before((done) => {
const cognito = new Cognito();
return cognito.authUser(
'john@doe.com',
'password',
)
.then((res) => {
AuthToken += res.AuthenticationResult.IdToken;
done();
})
.catch((err) => {
done(err);
});
});
它抛出此错误:
Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.
我认为这可能已解决:
before((done) => {
const cognito = new Cognito();
return new Promise(function(resolve) {
cognito.authUser(
'john@doe.com',
'password',
)
})
.then((res) => {
AuthToken += res.AuthenticationResult.IdToken;
done();
})
.catch((err) => {
done(err);
});
});
但是它给了我这个错误:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
我该如何解决?
答案 0 :(得分:2)
第一种方法,您可以使用return
关键字让跑步者为您处理承诺并等待您的承诺回调。
因此,在这种情况下就不需要done
了!
before(() =>
const cognito = new Cognito();
return cognito.authUser(
'john@doe.com',
'password',
)
.then((res) => {
AuthToken += res.AuthenticationResult.IdToken;
})
});
或使用回调方式(带有done
)而不使用return
关键字:
before((done) => {
const cognito = new Cognito();
cognito.authUser(
'john@doe.com',
'password',
)
.then((res) => {
AuthToken += res.AuthenticationResult.IdToken;
done();
})
});
如错误所述,您不能同时使用“兑现承诺”和回调方式(使用done => {...}
)。
选择其中一个:让跑步者自己处理承诺及其回调,或者使用done
处理自己!
答案 1 :(得分:2)
该错误可以解释一下。
您不能同时使用回调和返回。
您有2个选择:
回调(
done
参数)
before((done) => {
const cognito = new Cognito();
cognito.authUser(
'john@doe.com',
'password',
)
.then((res) => {
AuthToken += res.AuthenticationResult.IdToken;
done();
})
.catch((err) => done(err));
});
或
兑现承诺
before(() => {
const cognito = new Cognito();
return cognito.authUser(
'john@doe.com',
'password',
)
.then((res) => {
AuthToken += res.AuthenticationResult.IdToken;
})
});