Насмешливый реактотрон для Jest - PullRequest
1 голос
/ 07 марта 2019

Я установил Reactotron с конфигурацией почти по умолчанию:

import Reactotron from 'reactotron-react-native';
import { reactotronRedux } from 'reactotron-redux';

const reactotron = Reactotron
  .configure()
  .useReactNative()
  .use(reactotronRedux())
  .connect();

export default reactotron;

И импортировал его в 'index.js':

if (__DEV__) { import('./app/utils/reactotron'); }

Но после этого большинство тестов Jestошибка со следующей ошибкой:

ReferenceError: WebSocket is not defined

   8 |   .useReactNative()
   9 |   .use(reactotronRedux())
> 10 |   .connect();
     | ^
  11 | 
  12 | export default reactotron;

  at createSocket (node_modules/reactotron-react-native/dist/index.js:1:13571)
  at a.value (node_modules/reactotron-core-client/dist/index.js:1:8397)
  at Object.<anonymous> (app/utils/reactotron.js:10:1)

Похоже, мне нужно добавить WebSocket или что-то еще в глобальные переменные для тестов, но я должен сделать это для всех тестов или есть какой-то способ сделать это один раз длявсе тесты?

1 Ответ

2 голосов
/ 14 марта 2019

Оказалось, что для таких случаев нам нужно смоделировать пакет reactotron-react-native. Чтобы решить эту проблему, просто поместите папку ' mocks ' в корневую папку и добавьте туда файл с тем же именем, что и package. Таким образом, для этого случая это будет «responseotron-реагировать-native.js». Этот файл должен макетировать все функции из пакета. Для меня помог следующий:

const reactotron = {
  configure: () => reactotron,
  useReactNative: () => reactotron,
  use: () => reactotron,
  connect: () => reactotron,
};

module.exports = reactotron;

В этом случае он позволяет объединять функции в цепочку, поэтому порядок вызовов в тестах можно изменить.

...