在前端开发中,我们经常需要使用依赖库来实现某些功能。而在进行单元测试时,我们需要对这些依赖进行 mock,以便能够更好地控制测试的环境和结果。Jest 是一个流行的 JavaScript 测试框架,它提供了一套完整的 mock API,可以帮助我们轻松地进行依赖的 mock。
Jest mock 的基本用法
在 Jest 中,mock 是一种模拟对象,它可以模拟出依赖库的行为,并且可以用来替换真实的依赖库。使用 Jest 的 mock API,我们可以轻松地创建 mock 对象,并在测试中使用它们。
以下是 Jest mock 的基本用法示例:
// javascriptcn.com 代码示例 // 依赖库 const dep = { foo() { return 'foo'; } }; // 测试用例 test('test dep.foo', () => { // 创建 mock 对象 const mockFoo = jest.fn(() => 'mock foo'); // 将 mock 对象替换为真实的依赖库 dep.foo = mockFoo; // 调用函数 const result = dep.foo(); // 断言 expect(result).toBe('mock foo'); // 检查 mock 对象是否被调用 expect(mockFoo).toHaveBeenCalled(); });
在上面的示例中,我们首先定义了一个名为 dep
的依赖库,它有一个名为 foo
的方法。接着,我们在测试用例中创建了一个 mock 对象 mockFoo
,并将其替换为真实的 foo
方法。最后,我们调用 foo
方法,并断言其返回值为 'mock foo'
,同时检查 mock 对象是否被调用。
Jest mock 的高级用法
除了基本用法之外,Jest 还提供了一些高级的 mock API,可以帮助我们更好地模拟依赖库的行为。以下是一些常见的高级用法示例。
模拟依赖库的返回值
有时候,我们需要模拟依赖库的返回值,以便更好地控制测试的结果。在 Jest 中,我们可以使用 mockReturnValue
方法来模拟依赖库的返回值。
以下是模拟依赖库的返回值示例:
// javascriptcn.com 代码示例 // 依赖库 const dep = { foo() { return 'foo'; } }; // 测试用例 test('test dep.foo', () => { // 创建 mock 对象并模拟返回值 const mockFoo = jest.fn().mockReturnValue('mock foo'); // 将 mock 对象替换为真实的依赖库 dep.foo = mockFoo; // 调用函数 const result = dep.foo(); // 断言 expect(result).toBe('mock foo'); // 检查 mock 对象是否被调用 expect(mockFoo).toHaveBeenCalled(); });
在上面的示例中,我们使用了 mockReturnValue
方法来模拟依赖库的返回值。首先,我们创建了一个 mock 对象 mockFoo
,并使用 mockReturnValue
方法来模拟返回值为 'mock foo'
。接着,我们将 mock 对象替换为真实的 foo
方法,并调用它。最后,我们断言其返回值为 'mock foo'
,并检查 mock 对象是否被调用。
模拟异步函数的返回值
有时候,我们需要模拟异步函数的返回值,以便更好地控制测试的结果。在 Jest 中,我们可以使用 mockResolvedValue
方法来模拟异步函数的返回值。
以下是模拟异步函数的返回值示例:
// javascriptcn.com 代码示例 // 依赖库 const dep = { async foo() { return 'foo'; } }; // 测试用例 test('test dep.foo', async () => { // 创建 mock 对象并模拟返回值 const mockFoo = jest.fn().mockResolvedValue('mock foo'); // 将 mock 对象替换为真实的依赖库 dep.foo = mockFoo; // 调用异步函数 const result = await dep.foo(); // 断言 expect(result).toBe('mock foo'); // 检查 mock 对象是否被调用 expect(mockFoo).toHaveBeenCalled(); });
在上面的示例中,我们使用了 mockResolvedValue
方法来模拟异步函数的返回值。首先,我们创建了一个 mock 对象 mockFoo
,并使用 mockResolvedValue
方法来模拟返回值为 'mock foo'
。接着,我们将 mock 对象替换为真实的 foo
方法,并调用它。最后,我们使用 async/await
来等待异步函数的返回值,并断言其返回值为 'mock foo'
,并检查 mock 对象是否被调用。
总结
Jest 是一个非常强大的 JavaScript 测试框架,它提供了一套完整的 mock API,可以帮助我们更好地进行依赖的 mock。在使用 Jest 进行单元测试时,我们应该熟练掌握 Jest mock 的基本用法和高级用法,以便能够更好地控制测试的环境和结果。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65557e4bd2f5e1655dfb06e4