Jest Custom Matchers: "это" не определено внутри соответствия - PullRequest
1 голос
/ 26 марта 2020

В соответствии с документацией https://jestjs.io/docs/en/expect#custom -matchers-api Я создаю свой сопоставитель, однако this === undefined внутри функции сопоставления. Я хочу использовать описанные в документации помощники, например this.isNot, но они недоступны.

В чем может быть причина такого поведения?

setupJestExpect.ts:

expect.extend({
  toBeMoment(received: any): CustomMatcherResult {

    console.log(this); // undefined <-- here

    const pass: boolean = moment.isMoment(received) as boolean;
    return pass
      ? { pass, message: () => '' }
      : { pass, message: () => 'expected that received value to be an instance of Moment' };
  }
});

foo.spe c .ts:

describe('Foo', () => {
  it('should do something', async (): Promise<void> => {
    // const data: any[] = ....
    expect(data).toEqual(
      expect.arrayContaining([
        expect.objectContaining({
          bar: expect.toBeMoment()
        })
      ])
    );
  });
});

1 Ответ

0 голосов
/ 28 марта 2020

Сопоставитель получает undefined в контексте выполнения из-за способа его вызова.

Если вы вызываете его с помощью:

const m = moment();
expect(m).toBeMoment();

Вы получаете ожидаемое значение в this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...