Jest 如何进行 Mock API 测试

在前端开发中,我们常常需要测试应用的网络请求功能。Mock API(模拟 API)测试是一种在不实际调用 API 的情况下进行测试的方法。这样可以减少对真实 API 的依赖,大大提高测试效率。

Jest 是一个著名的 JavaScript 测试框架,支持 Mock API 测试。本文将介绍 Jest 如何进行 Mock API 测试的方法。

Jest Mock API 测试

在实际的开发中,我们有时需要模拟 API 返回的数据,以便测试代码的正确性。Jest 提供了 Mock API 功能,可以轻松创建假数据。

// mock api 模块
module.exports = {
  getUsers: () => [
    { id: 1, name: '张三' },
    { id: 2, name: '李四' },
  ],
  getUser: (id) => ({ id, name: '张三' }),
};

在测试用例中,我们可以使用 Jest 提供的 Mock API 功能来模拟 API 数据。

const api = require('./api');

jest.mock('./api', () => ({
  getUsers: jest.fn(),
  getUser: jest.fn(),
}));

it('should get users', async () => {
  api.getUsers.mockResolvedValue([
    { id: 1, name: '张三' },
    { id: 2, name: '李四' },
  ]);

  const users = await api.getUsers();

  expect(users).toHaveLength(2);
  expect(users[0].id).toBe(1);
  expect(users[0].name).toBe('张三');
});

it('should get user', async () => {
  api.getUser.mockResolvedValue({ id: 1, name: '张三' });

  const user = await api.getUser(1);

  expect(user.id).toBe(1);
  expect(user.name).toBe('张三');
});

在上面的代码中,我们使用 jest.mock() 方法来模拟 API 响应。通过 mockResolvedValue() 方法来模拟异步 API 函数返回的值。使用 expect() 方法判断测试用例的正确性。

Mock API 相关方法

在 Jest 中,Mock API 有多种使用方式。下面介绍几种常见方式。

jest.fn()

jest.fn() 方法是 Jest 提供的 Mock API 方法之一,可以创建一个空的 Mock API 函数。该函数不会执行任何操作,但可以用来测试函数的调用和返回值。

const fn = jest.fn();

fn(1, 2);

expect(fn).toHaveBeenCalled();
expect(fn).toHaveBeenCalledWith(1, 2);

在上面的代码中,我们使用 jest.fn() 方法创建了一个空的 Mock API 函数,并调用了该函数。使用 expect() 方法判断函数是否被调用,以及被调用时传递的参数。

jest.mock()

jest.mock() 方法是 Jest 提供的 Mock API 方法之一,可以用来模拟一个模块。

// api 模块
module.exports = {
  getUsers: () => [],
  getUser: () => {},
};

jest.mock('./api');

it('should get users', async () => {
  const api = require('./api');

  api.getUsers.mockResolvedValue([
    { id: 1, name: '张三' },
    { id: 2, name: '李四' },
  ]);

  const users = await api.getUsers();

  expect(users).toHaveLength(2);
  expect(users[0].id).toBe(1);
  expect(users[0].name).toBe('张三');
});

在上面的代码中,我们使用 jest.mock() 方法模拟了一个 api 模块。通过模拟模块的方法,可以轻松模拟 API 数据。

jest.spyOn()

jest.spyOn() 方法可以用来创建一个被监视的函数。通过该函数可以记录函数的调用情况和返回值。

const obj = {
  method(val) {
    console.log(val);
  },
};

it('should spy method', () => {
  const spy = jest.spyOn(obj, 'method');

  obj.method(1);

  expect(spy).toHaveBeenCalled();
  expect(spy).toHaveBeenCalledWith(1);
});

在上面的代码中,我们使用 jest.spyOn() 方法创建了一个被监视的函数,并使用该函数调用了 obj.method(1) 方法。使用 expect() 方法判断函数是否被调用,以及被调用时传递的参数。

总结

Mock API 测试是在前端开发中一种常用的测试方法,Jest 是目前流行的 JavaScript 测试框架之一,并且支持 Mock API 测试。在本文中,我们介绍了 Jest 如何进行 Mock API 测试的方法,并提供了示例代码。熟练掌握 Jest Mock API 测试可以大大提高测试效率,帮助我们更好地保证应用质量。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a5fed5add4f0e0ffe9ce61


纠错反馈