Jest позволяет использовать несколько типов для соответствия структуры объекта - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать тест с jest, который должен проверить, является ли ключ объекта string или number.

Все просто, но я не могу найти ничего в документации .

Пример теста:

test('Assets structure is right', () => {
    const assetExpectedStructure = {
      id: expect.any(String),
      source_type: expect.any(String),
      media_types: expect.any(Array),
      source_id: expect.any(String)   // <------------ HERE  String or Number
    }

    for (const asset of assets) {
        expect(asset).toMatchObject(assetExpectedStructure)
    }
 }

Я мог бы сделать expect.anything(), но он также получает другие типы (Boolean, Objects et c.), Которые мне не нужны.

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я не очень хорошо знаком с библиотекой, но из документации вы можете добавить свои собственные совпадения:

expect.extend({
  toBeOneOf(received, constructors = [String, Number]) {
    const pass = !!constructors.find(c => received.constructor === c);
    if (pass) {
      return {
        message: () => `looks good`,
        pass: true,
      };
    } else {
      return {
        message: () => `no so good....`,
        pass: false,
      };
    }
  },
});
1 голос
/ 29 мая 2020

Не добавляя настраиваемые сопоставители через expect.extend, попробуйте:

test('Assets structure is right', () => {
    const assetExpectedStructure = {
      id: expect.any(String),
      source_type: expect.any(String),
      media_types: expect.any(Array),
      source_id: expect.stringMatching(/\d+/) // regex will match only alpha numerical string
    }

    for (const asset of assets) {
        expect(asset).toMatchObject(assetExpectedStructure)
    }
 }

Checkout https://jestjs.io/docs/en/expect#expectstringmatchingstring - regexp

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