может не быть готовым свойство __mobxInstanceCount в логических «истинных» тестовых случаях не работает машинопись и MOBX - PullRequest
0 голосов
/ 04 мая 2018

TypeError: Невозможно создать свойство '__mobxInstanceCount' для логического значения 'true'

      at Object.<anonymous> (node_modules/mobx/lib/mobx.js:2620:38)
      at Object.<anonymous> (src/Stores/DashboardStore.ts:9:14)
      at Object.<anonymous> (src/__tests__/DashboardStore.test.ts:3:24)

Test Suites: 1 failed, 1 total
mobx.js:2620 mentions about global multiple instance.

Dashboard.test.ts импортировать DashboardStore из '../Stores/DashboardStore';

describe('DashboardStore', () => {
    let dashboardStore;
    beforeEach(() => {
        dashboardStore = DashboardStore;
    });
    // tslint:disable-next-line:no-console
    console.log(dashboardStore);
});
 FAIL  src\__tests__\DashboardStore.test.ts
  ? Test suite failed to run

Мой запрос - дать подсказку о том, как выполнить модульное тестирование компонента и сохранить его. Спасибо тебе.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Я не знаю, почему, для меня это была проблема в файле конфигурации jest, когда я пытался объявить окно глобальным.

0 голосов
/ 04 мая 2018

Похоже, ваш код импортирует mobx несколько раз (глядя на то, откуда появилась эта ошибка).

Похоже, что сообщения исходят из источника: https://github.com/mobxjs/mobx/blob/master/src/core/globalstate.ts

Ошибка срабатывает, только если __mobxInstanceCount уже установлен, что означает, что включены 2 разных файла globalstate.ts (может быть, 2 разные версии mobx?)

дополнительные советы

Я не уверен насчет шуток, но с мокко тесты могут выполняться одновременно. Это означает, что beforeEach в этом случае не всегда обеспечивает чистую переменную dashboardStore. (beoreEach может выполняться дважды, а затем 2 теста могут быть запущены впоследствии, что создает проблемы, поскольку существует только переменная dashboardStore и перезаписывается при каждом вызове beforeEach()).

Способ введения

Если вы действительно хотите провести модульные тесты для ваших реагирующих компонентов. я бы посоветовал абстрагироваться от прямого использования магазина mobx, используя вместо этого функцию @inject: https://github.com/mobxjs/mobx-react#inject-as-function

Таким образом, вам не нужно издеваться над любым магазином mobx, а нужно только вставить необходимые реквизиты в компоненты реакции. (сохранение ваших компонентов более декларативными в том, что им действительно нужно.)

...