npm 包 jest-serializer-functions 使用教程

前言

在编写 JavaScript 的测试代码时,我们通常会使用 Jest 测试框架进行测试。Jest 提供了许多内置的 assertion API 和 mock API,使得我们编写测试代码时能够更加高效且方便。

然而,Jest 并不支持对函数进行深度比较,当我们在测试某个函数在输入相同时是否返回期望的结果时,就需要考虑该如何实现深度比较。

在这篇文章中,我们将会介绍一个 npm 包 jest-serializer-functions,它提供了一种非常方便实用的方式来进行深度比较。

安装

你可以通过以下命令来安装 jest-serializer-functions:

npm install jest-serializer-functions --save-dev

使用

下面我们将演示如何通过 jest-serializer-functions 进行深度比较。

基本用法

首先,在我们的测试文件中引入 jest-serializer-functions:

const serializeFunctions = require('jest-serializer-functions')
expect.addSnapshotSerializer(serializeFunctions)

然后,我们就可以在测试用例中进行深度比较了:

const myFunction = require('../myFunction')

test('myFunction should return correct result', () => {
  const input = {
    foo: 'bar',
    baz: () => {
      console.log('baz')
    }
  }
  const output = myFunction(input)
  expect(output).toMatchSnapshot()
})

在上面的测试用例中,我们调用了 Jest 的 toMatchSnapshot 方法来生成一个快照,该快照将包含我们的函数,并且使用 jest-serializer-functions 进行了深度比较。如果函数中包含了一些自定义属性,则 jest-serializer-functions 会自动地将其序列化后进行比较。

支持函数序列化

如果某个函数包含了一些自定义属性,那么在比较过程中,这些自定义属性将不会被考虑在内。

不过,我们可以通过给这些函数添加 toJSON 方法来支持函数序列化。

const myFunction = require('../myFunction')

test('myFunction should return correct result', () => {
  const input = {
    foo: 'bar',
    baz: () => {
      console.log('baz')
    }
  }
  const output = myFunction(input)
  output.baz.toJSON = () => {
    return {
      type: 'function',
      value: output.baz.toString()
    }
  }
  expect(output).toMatchSnapshot()
})

在上面的例子中,我们给 output.baz 添加了一个 toJSON 方法,并通过 expect 方法生成了一个快照。

总结

通过本文,我们介绍了如何使用 jest-serializer-functions 进行深度比较,并支持了函数序列化。希望本文能够对大家在编写 JavaScript 测试代码时能够更加高效且方便有所帮助。

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


纠错
反馈