reactjs - 使用 jest 测试反应服务
问题描述
有没有办法使用 jest 测试服务?我试图这样做,但测试似乎没有运行。
import { postAuthUser } from '../authService';
it('login user', () => {
return postAuthUser({ username: 'user', password: 'password' }).then( data => {
expect(data).toEqual({});
});
});
我有这个,我正在尝试使用一项服务,但由于某种原因,它不起作用。
解决方案
我假设你的使用postAuthUser
方法是这样的:authService
axios
authService.ts
import axios from 'axios';
export async function postAuthUser(auth) {
return axios.post('https://github.com/mrdulin', auth);
}
单元测试:
import { postAuthUser } from './authService';
import axios from 'axios';
jest.mock('axios', () => {
return {
post: jest.fn()
};
});
describe('authService', () => {
describe('#postAuthUser', () => {
it('login user', () => {
(axios.post as jest.MockedFunction<typeof axios.post>).mockResolvedValueOnce({});
return postAuthUser({ username: 'user', password: 'password' }).then(data => {
expect(data).toEqual({});
expect(axios.post).toBeCalledWith('https://github.com/mrdulin', { username: 'user', password: 'password' });
});
});
});
});
覆盖率 100% 的单元测试结果:
PASS src/stackoverflow/53934331/authService.spec.ts
authService
#postAuthUser
✓ login user (5ms)
----------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
authService.ts | 100 | 100 | 100 | 100 | |
----------------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 3.483s, estimated 4s
这是完成的演示: https ://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/53934331
推荐阅读
- javascript - 带有渲染回调函数的jQuery数据表问题
- swift - 快速对象初始化
- android - 在应用程序之间传递序列化对象
- java - 需要在 HttpsURLConnection 中传递证书信息的建议
- php - Laravel:正确覆盖 SoftDeletes 特征
- angular - Angular 5 Authorization Header 在 Safari 中有效,但在 Chrome 中无效
- android - 访问内容提供者数据的问题
- axes - Scichart:如何激活或停用轴范围同步
- javascript - 角度测试错误 - NullInjectorError:没有 TrimInputDirective 的提供者
- javascript - 根据环境处理 InversifyJS 配置