reactjs 类型“FunctionMatchers”上不存在属性“to”< any>

icomxhvb  于 2023-01-25  发布在  React
关注(0)|答案(2)|浏览(135)

我正在使用React、Jest和Typescript以及以下these文档来使用此代码创建单元测试:
expect(HorizontalNotIndented.props().includedProp).to.equal(dummyValue);
我已经安装了所有类型,但是当我在测试中使用to时,我得到了错误Property 'to' does not exist on type 'FunctionMatchers<any>'.
看起来可能有一些混乱,是否to是来自笑话或茉莉花?我不是100%肯定,但我完全按照酶文件。

更新

我现在在构建这个测试时遇到了一些问题-下面的文档和注解似乎不允许测试工作。我正在尝试测试 prop 渲染是否正确:

const dummyValue = {
  background: {
    color: 'rgba(38, 176, 17, 0.2)',
    value: 100,
  },
  foreground: {
    color: 'rgb(38, 176, 17)',
    value: 80,
  },
};

const HorizontalNotIndented = shallow(
  <Horizontal
    value={dummyValue}
  />,
);

HorizontalNotIndented.setProps({
  value
});

describe('HCGauge', () => {
  test('Test to see if props are in rendered component', () => {
expect(HorizontalNotIndented.props().value).toEqual(dummyValue);

抛出错误:

expect(received).toEqual(expected) // deep equality

    Expected: {"background": {"color": "rgba(38, 176, 17, 0.2)", "value": 100}, "foreground": {"color": "rgb(38, 176, 17)", "value": 80}}
    Received: undefined

      62 |   test('Test to see if props are in rendered component', () => {
      63 |     // expect('value' in HorizontalNotIndented.props()).toEqual(dummyValue);
    > 64 |     expect(HorizontalNotIndented.props().includedProp).toEqual(dummyValue);
         |
kninwzqo

kninwzqo1#

如果您使用的是Jest,则应使用.toBe()而不是.to.equal(),如下所述:
https://jestjs.io/docs/en/expect.html#tobevalue
如果参数(dummyValue)是一个对象,则应按如下所述使用.toMatchObject()
https://jestjs.io/docs/en/expect.html#tomatchobjectobject

piok6c0g

piok6c0g2#

我在TypeScript中使用jest-image-matcher时遇到过类似的问题

Property 'toMatchImage' does not exist on type 'JestMatchers<any>'.

解决方案:

允许我们添加自定义匹配器,为了让jest知道这个自定义匹配器,我们需要扩展匹配器类型

// filename: index.d.ts
export {};
declare global {
  namespace jest {
    interface Matchers < R > {
      toMatchImage(image: Buffer, options ? : {}): R;
    }
  }
}

同样,我们可以根据需求添加/替换新的自定义匹配器。

相关问题