#javascript #node.js #unit-testing #jestjs
Вопрос:
Ниже приведен код моего тестового файла node js , это модульный тестовый случай, и он не удался. Пожалуйста, подробно ознакомьтесь с кодом и сообщением об ошибке ниже.
jest.unmock('./utils.js');
describe('test', () => {
it('test', async (done) => {
await expect(getAPISecretKey('testKey')).rejects.toEqual('RestError: AKV10000: Request is missing a Bearer or PoP token.');
});
});
Это не удается с приведенной ниже ошибкой
FAIL src/utils.test.js
● test › test
expect(received).rejects.toEqual(expected) // deep equality
Expected: ["RestError: AKV10000: Request is missing a Bearer or PoP token."]
Received: [RestError: AKV10000: Request is missing a Bearer or PoP token.]
6 | it('test', async (done) => {
> 7 | await expect(getAPISecretKey('testKey')).rejects.toEqual(error);
| ^
8 | });
9 | });
10 |
at Object.toEqual (node_modules/expect/build/index.js:241:20)
at Object.<anonymous> (src/utils.test.js:7:58)
Я попытался использовать следующий способ, но все равно это не сработало.
jest.unmock('./utils.js');
describe('test', () => {
var error = ['RestError: AKV10000: Request is missing a Bearer or PoP token.'];
it('test', async (done) => {
await expect(getAPISecretKey('testKey')).rejects.toEqual(new Error('Request is missing a Bearer or PoP token.'));
});
});
код ключа getAPISecretKey
async function getAPISecretKey(secretNameStr) {
let credentials = getKeyVaultCredentials();
let keyVaultClient = new SecretClient(KEY_VAULT_URL, credentials);
let secret = await keyVaultClient.getSecret(secretNameStr);
return secret.value;
}
Попробовал следующим образом и выдал ошибку следующим образом
jest.unmock('./utils.js');
describe('test', () => {
//toEqual('RestError: AKV10000: Request is missing a Bearer or PoP token.');
it('test', async (done) => {
await expect(getAPISecretKey('testKey')).rejects.toThrow('AKV10000: Request is missing a Bearer or PoP token.');
});
});
Ошибка:
FAIL src/utils.test.js (14.891 s)
● test › test
: Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error:
4 | describe('test', () => {
5 | //toEqual('RestError: AKV10000: Request is missing a Bearer or PoP token.');
> 6 | it('test', async (done) => {
| ^
7 | await expect(getAPISecretKey('testKey')).rejects.toThrow('AKV10000: Request is missing a Bearer or PoP token.');
8 |
at new Spec (node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
at Suite.<anonymous> (src/utils.test.js:6:6)
at Object.<anonymous> (src/utils.test.js:4:1)
Комментарии:
1. Вам нужно показать код
getAPISecretKey
2. @slideshowp2 , обновленный вопрос с запрошенным кодом
3. Может
toThrow
быть, вместоtoEqual
этого ? Исключение, скорее всего, является объектом, и вы проверяете строку. «Ожидаемые» и «Полученные» значения выглядят одинаково, потому что Error.toString просто выводит сообщение об ошибке.4. @Cully, спасибо за ваш ответ, я тоже пытался это сделать, но получил сообщение об ошибке «Тайм — аут-Асинхронный обратный вызов не был вызван в течение тайм-аута 5000 мс, указанного jest.setTimeout. Тайм — аут-Асинхронный обратный вызов не был вызван в течение тайм-аута 5000 мс, указанного в jest.setTimeout. Ошибка:» я также обновил вопросы. пожалуйста, посмотрите
5. Тебе обязательно
await getAPISecretKey
это делать ? Это асинхронно. Похоже , вы просто передаете Обещаниеexpect
, а не результатgetAPISecretKey
. На самом деле, нм, похоже, что, возможно, вам это не нужно для.rejects
Ответ №1:
Я могу решить проблему, удалив «готово» из аргументов асинхронного метода следующим образом.
jest.unmock('./utils.js');
//jest.setTimeout(10000);
describe('test', () => {
it('test', async () => {
await expect(getAPISecretKey('testKey')).rejects.toThrow('AKV10000: Request is missing a Bearer or PoP token.');
});
});