[英]Getting undefined with jest mock testing axios
我在這里做錯了什么? 我已經在這幾天了,似乎無法弄清楚我正在嘗試測試的代碼的問題。
這是我對 API 的電話:
import axios from 'axios';
import { environment } from '../environments/environment';
import { AppPersons } from './usersUtils';
const getData = (): Promise<AppPersons[]> => {
const config = {
headers: {
Authorization: `Bearer ${localStorage.getItem('access_token')}`
}
};
return axios
.get(`${environment.userServiceURL}/persons`, config)
.then(response => response.data._embedded.persons)
.catch(err => {
console.log(err);
});
};
export default getData;
這是我的測試:
import axios from 'axios';
import getData from '../utils/userData';
jest.mock('axios');
describe('user page page', () => {
it('should fetch users', () => {
const users = {
_embedded: {
person: [
{
role: {
id: 1,
roleName: 'Administrator',
description: 'Administers the systems and user.'
},
active: true,
email: 'user@test.com',
firstName: 'Administrator',
lastName: 'System',
username: 'admin',
id: 1,
_links: {
self: { href: 'http://users:8080/users/api/data/persons/1' },
person: {
href: 'http://users:8080/users/api/data/persons/1{?projection}',
templated: true
},
role: { href: 'http://users:8080/users/api/data/persons/1/role' }
}
}
]
}
};
const response = { data: users };
axios.get.mockImplementation(() => Promise.resolve(response));
return getData().then(resp => expect(resp).toEqual(users));
});
});
結果:
Expected: {"_embedded": {"person": [{"_links": {"person": {"href": "http://users:8080/users/api/data/persons/1{?projection}", "templated": true}, "role": {"href": "http://users:8080/users/api/data/persons/1/role"}, "self": {"href": "http://users:8080/users/api/data/persons/1"}}, "active": true, "email": "user@test.com", "firstName": "Administrator", "id": 1, "lastName": "System", "role": {"description": "Administers the systems and user.", "id": 1, "roleName": "Administrator"}, "username": "admin"}]}}
Received: undefined
收到的東西不斷地帶着undefined
的東西回來,我很難理解為什么。
我的第一個想法可能是我正在刪除的 object 但看起來當我更改它時,收到的仍然不正確。
您應該將模擬響應從users._embedded.person
更改為users._embedded.persons
。 這就是你得到undefined
的原因。
例如
getData.ts
:
import axios from 'axios';
import { environment } from './environment';
import { AppPersons } from './usersUtils';
const getData = (): Promise<AppPersons[]> => {
const config = {
headers: {
Authorization: `Bearer ${localStorage.getItem('access_token')}`,
},
};
return axios
.get(`${environment.userServiceURL}/persons`, config)
.then((response) => response.data._embedded.persons)
.catch((err) => {
console.log(err);
});
};
export default getData;
usersUtils.ts
:
export interface AppPersons {}
environment.ts
:
export const environment = {
userServiceURL: '',
};
getData.test.ts
:
import axios from 'axios';
import getData from './getData';
jest.mock('axios');
const maxios = axios as jest.Mocked<typeof axios>;
describe('user page page', () => {
it('should fetch users', () => {
const users = {
_embedded: {
persons: [
{
role: {
id: 1,
roleName: 'Administrator',
description: 'Administers the systems and user.',
},
active: true,
email: 'user@test.com',
firstName: 'Administrator',
lastName: 'System',
username: 'admin',
id: 1,
_links: {
self: { href: 'http://users:8080/users/api/data/persons/1' },
person: {
href: 'http://users:8080/users/api/data/persons/1{?projection}',
templated: true,
},
role: { href: 'http://users:8080/users/api/data/persons/1/role' },
},
},
],
},
};
const response = { data: users };
maxios.get.mockResolvedValue(response);
return getData().then((resp) => {
expect(resp).toEqual(users._embedded.persons);
expect(maxios.get).toBeCalledWith('/persons', {
headers: {
Authorization: `Bearer null`,
},
});
});
});
});
單元測試結果:
PASS examples/65280473/getData.test.ts
user page page
✓ should fetch users (3 ms)
----------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------------|---------|----------|---------|---------|-------------------
All files | 88.89 | 100 | 66.67 | 88.89 |
environment.ts | 100 | 100 | 100 | 100 |
getData.ts | 87.5 | 100 | 66.67 | 87.5 | 15
----------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 4.173 s
源代碼: https://github.com/mrdulin/jest-v26-codelab/tree/main/examples/65280473
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.