Jest 是一个流行的 JavaScript 测试框架,由 Facebook 开发并维护。它支持各种类型的测试,包括单元测试、集成测试和快照测试。Jest 提供了一整套测试工具,包括断言库、模拟函数、代码覆盖率报告等。
以下是一个使用 Jest 进行单元测试的基本示例:
// add.js
function add(a, b) {
return a + b;
}
module.exports = add;
// add.test.js
const add = require('./add');
test('adds 1 + 2 to equal 3', () => {
expect(add(1, 2)).toBe(3);
});
在这个例子中,我们首先定义了一个 add 函数,然后在 add.test.js 文件中编写了一个测试。测试使用 test 函数定义,expect 函数用于断言 add(1, 2) 的结果应该是 3。
Jest 还支持模拟函数,这是在测试中模拟复杂行为的一种方法。例如:
// users.js
function getUsers() {
// 这个函数会从远程服务器获取用户
}
module.exports = getUsers;
// users.test.js
const getUsers = require('./users');
jest.mock('./users');
test('getUsers returns users', async () => {
getUsers.mockResolvedValue(['John', 'Sally']);
const users = await getUsers();
expect(users).toEqual(['John', 'Sally']);
});
在这个例子中,我们使用 jest.mock 函数模拟了 getUsers 函数,使其返回一个预定义的值。这样我们就可以在不实际调用远程服务器的情况下测试这个函数。
Jest 还支持快照测试,这是一种用于测试 UI 是否发生意外更改的方法。例如:
// component.js
function Component() {
return '<div>Hello, world!</div>';
}
module.exports = Component;
// component.test.js
const Component = require('./component');
test('Component renders correctly', () => {
expect(Component()).toMatchSnapshot();
});
在这个例子中,我们使用 toMatchSnapshot 函数来生成一个快照。当测试运行时,Jest 会将 Component 的输出与之前保存的快照进行比较。如果输出发生了更改,测试就会失败。
以上只是 Jest 功能的一部分,Jest 还有许多其他的特性和选项,你可以在 Jest 的官方文档 中找到更多信息。
另外需要注意的是 在单元测试中 如果两个文件相互调用 这个的话 可能会导致运行结果报错 比如单测一个function 会报 xxx is not function
解决方案:
减少相互调用逻辑 或者可以通过mock function 进行测试 mock的话可能又不完全是我们想要的效果 毕竟我们想要的是测试我们项目中用到的文件或者函数