Получение ReferenceError: выборка не определена - PullRequest
0 голосов
/ 16 мая 2018

В моем тесте Saga для моего собственного реагирующего приложения (которое работает правильно) я добавил следующий тест, который вызывает функцию, выполняющую вызов POST http (doScan).

describe('Scan the product and register the scanning action', () => {
  const it = sagaHelper(scanProductSaga(scanProductAction(item)));

  it('logscan via ASL', (result) => {
    expect(result).toEqual(cps(ASLogger.logScan, xxx));
    return logScanResult;
  });

  it('should register the product', (result) => {
    expect(result).toEqual(call(doScan, logScanResult));
  });
});

Отдельный файл:

const doScan = scanObj =>
  toJSON(fetch('https://xxxx.xxxxxx.com/logger/scans', {
    method: 'POST',
    headers: new Headers(CONTENT_TYPE_HEADERS),
    body: JSON.stringify(scanObj),
  }));

Примечание: функция извлечения происходит из'act-native-interfaces.js 'внутри библиотекиact-native.Тест не пройден, и ошибка вызвана следующим исключением:

ReferenceError: fetch is not defined
      at doScan (/Users/andy/WebstormProjects/ASAP/api/index.js:81:11)....

Что может вызвать такую ​​проблему?Какое решение может быть?

Ответы [ 2 ]

0 голосов
/ 08 августа 2018

В некоторых случаях в универсальном приложении для клиента и сервера сопровождающие должны использовать модуль isomorphic-fetch в своем проекте Node, поскольку Node еще не содержит Fetch API , Для получения дополнительной информации прочитайте этот вопрос и ответ

Но в этом особом случае, следовательно, React Native, это несколько другое, потому что в области мобильных устройств нет V8, SpiderMonkey или Node. Есть JavaScriptCore. Итак, для этой новой ситуации следует использовать react-native-fetch.

Это немного отличается, установите его с кодом ниже:

npm install react-native-fetch

А затем используйте его как JSX компонент:

import Fetch from 'react-native-fetch'
...
  <Fetch
      url="https://jsonplaceholder.typicode.com/posts/1"
      retries={3}
      timeout={3000}
      onResponse={async (res) => {
        const json = await res.json()
        console.log(json)
      }}
      onError={console.error}
  />

Это так ново, но прекрасно.

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

реагировать-нативный имеет fetch по умолчанию, но тестовая среда на node.js не имеет fetch.

Вы можете импортировать fetch, как показано в верхней части тестового кода.

const fetch = require('node-fetch')

В файле activ-native-interface.js объявляется только тип fetch.

declare var fetch: any;
...