Jest-тестирование с React Native и Contentful - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь протестировать свое приложение React Native с помощью Jest. Я использую Contentful в качестве CMS для хранения своей внутренней информации. В настоящее время я пытаюсь проверить, что я инициализирую правильный клиент.

Вот код, который я использовал для инициализации клиента:

var client = contentful.createClient({
  space: 'w20789877',  // whatever the space id is 
  accessToken: '883829200101001047474747737' // some accessToken
})

Вот код, который я использовал для проверки инициализации клиента:

describe ('should initialize the correct client', () => {(
   it('should initialize the correct client info from contentful', () =>{
      expect(client).toEqual('w20789877', '883829200101001047474747737')
});
)};

Однако я получаю сообщение об ошибке, в котором говорится:

Difference: Comparing two different types of values. Expected undefined but received string.

По какой-то причине я получаю неопределенное значение для space и accessToken, но я правильно инициализирую клиента, поскольку позднее могу использовать это пространство. Даже при попытке распечатать пробел и accessToken печатается неопределенное значение.

1 Ответ

0 голосов
/ 03 июля 2018

Здесь есть несколько вопросов:

  1. toEqual сопоставитель получает параметр с одним значением; вы отправляете 2 параметры, поэтому эффективно используется только первый.
  2. client в этом случае является функцией, и вы пытаетесь сравнить ее со строкой. Независимо от того, что клиент не является строкой, в вашем случае это также undefined, поэтому появляется сообщение «Ожидается неопределенная, но полученная строка». Вы не тестируете пространство или accessToken здесь, вы тестируете клиент.

Я не совсем уверен, что вы пытаетесь проверить здесь, но это не имеет никакого отношения к Contentful.

Я предполагаю, что часть инициализации клиента находится где-то в коде, который вы хотите выполнить модульным тестом (а не инициализирован в тестовом файле). Я предлагаю тест, который проверяет, что функция createClient contentful вызывается с ожидаемыми параметрами при выполнении вашего кода; нет необходимости проверять, что клиент создан - это ответственность Contentful, чтобы убедиться, что он возвращает действительный объект client. Важно то, что вы передаете правильные параметры «space» и «accessToken», необходимые для вашего приложения.

Вообще говоря, внешние службы должны быть подвергнуты насмешке, и вам следует проверять только свою собственную логику и взаимодействие с внешними службами.

Пример

Для простоты предположим, что код, который инициализирует ваш клиент, выглядит следующим образом:

//client.js

var contentful = require('contentful')

export default function initializeClient() {
    var client = contentful.createClient({
      space: 'w20789877',  // whatever the space id is 
      accessToken: '883829200101001047474747737' // some accessToken
    });
}

Тест может выглядеть примерно так:

//client.test.js

describe('contentful client', () => {
    let contentful;
    let initializeClient;

    beforeEach(() => {
        jest.mock('contentful');

        contentful = require('contentful');
        initializeClient = require('./client').default;
    });

    it('should initialize the contentful client with the correct params', async () => {
        initializeClient();
        expect(contentful.createClient).toHaveBeenCalledWith({
            space: 'w20789877',
            accessToken: '883829200101001047474747737'
        });
    });
});

Примечание : Я не запускал и не тестировал приведенный выше код, но это общая концепция.

...