是否有可能扩展Jest / Expect Matcher

问题描述 投票:5回答:1

我想扩展Jest的isEqual匹配器,以便在比较之前转换期望值(这允许我在测试中使用多行字符串)。我需要做的就是通过lib:indentToFirstLine中的indent-to-first-line函数运行期望值,然后将其传递给isEqual。显然我不希望在我需要的任何地方都这样做,因此将它折叠成匹配器是有意义的,并且因为我想要与Jest / Expect的isEqual匹配器相同的功能,所以使用它是有意义的。

我尝试过以下方法:

import indentToFirstLine from 'indent-to-first-line'
import expect from 'expect'

const toEqualMultiline = (received, expectedTemplateString) => {
  const expected = indentToFirstLine(expectedTemplateString)
  return expect(received).toEqual(expected)
}

export default toEqualMultiline

但是expect(received).toEqual(expected)没有返回值,所以从undefined中的匹配器返回的值,导致Jest错误:

来自匹配器功能的意外返回。 Matcher函数应该按以下格式返回一个对象:{message?:string | function,pass:boolean}'undefined'被返回

我可以在我自己的匹配器中使用toEqual吗?

javascript testing jasmine jestjs matcher
1个回答
1
投票

如果您正在使用jest并将该匹配器传递给expect.extend,则可以使用提供的执行上下文来执行jest equals方法,如下所示:

import indentToFirstLine from 'indent-to-first-line'

export default function toEqualMultiline(received, expectedTemplateString) {
    const expected = indentToFirstLine(expectedTemplateString);
    return {
        message: () => `expected ${received} to equals multiline ${expected}`,
        pass: this.equals(received, expected)
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.