如何使用 jest 处理单元测试用例中的异步 Rest 错误
How to handle async Rest Error in unit test cases using jest
以下是我的节点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.'));
});
});
获取APISecretKey的代码
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)
我能够通过从异步方法参数中删除“完成”来解决问题,如下所示。
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.');
});
});
以下是我的节点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.'));
});
});
获取APISecretKey的代码
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)
我能够通过从异步方法参数中删除“完成”来解决问题,如下所示。
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.');
});
});