Jest - ReferenceError: импортированная функция не определена - PullRequest
1 голос
/ 14 февраля 2020

Я занимаюсь этим уже 2 часа, но не могу понять, что я делаю неправильно. У меня есть следующий тест jest + puppeteer:

import {convert} from '../__helpers__/number';

const getAmount = async (page) => {
  const element = await page.waitForSelector('.my-element');

  return element.evaluate((node) => convert(node.innerText));
}

, который очень прост и понятен. Но он продолжает сбой со следующей ошибкой:

Error: Evaluation failed: ReferenceError: _number is not defined
          at __puppeteer_evaluation_script__:2:15
          at ExecutionContext._evaluateInternal (node_modules/puppeteer/lib/ExecutionContext.js:122:13)
        -- ASYNC --
          at ExecutionContext.<anonymous> (node_modules/puppeteer/lib/helper.js:111:15)
          at ElementHandle.evaluate (node_modules/puppeteer/lib/JSHandle.js:55:42)
          at ElementHandle.evaluate (node_modules/puppeteer/lib/helper.js:112:23)
          at _callee$ (__tests__/e2e/test.spec.js:13:27)
          at tryCatch (node_modules/@babel/polyfill/node_modules/regenerator-runtime/runtime.js:45:40)
          at Generator.invoke [as _invoke] (node_modules/@babel/polyfill/node_modules/regenerator-runtime/runtime.js:271:22)
          at Generator.prototype.(anonymous function) [as next] (node_modules/@babel/polyfill/node_modules/regenerator-runtime/runtime.js:97:21)
          at asyncGeneratorStep (__tests__/e2e/test.spec.js:30:103)
          at _next (__tests__/e2e/test.spec.js:32:194)

Приведенный выше номер строки не совпадает с исходным кодом ... и из-за ошибки он выглядел так, как будто он выходит из переданного кода. Поэтому я пошел в местоположение jest-transform-cache и посмотрел на файл, и номера строк тоже не совпадают; все они выключены на 1. Транспортированный код также имел обновленный вывод и имел следующую строку:

var _number = require('../__helpers__/number');

Я пытался отладить всеми способами, которые мог придумать:

  • очищенный кеш
  • попытался переименовать файл
  • перезапустил систему
  • запустил тест в другой системе
  • выполнил jest без кеша et c

Также попробовал это:

// import {convert} from '../__helpers__/number';

const convert = (text) => magic(text); // for simplicity's sake

const getAmount = async (page) => {
  const element = await page.waitForSelector('.my-element');

  return element.evaluate((node) => convert(node.innerText));
}

Теперь это терпит неудачу со следующей ошибкой:

Evaluation failed: ReferenceError: convert is not defined

      at __puppeteer_evaluation_script__:2:15
      at ExecutionContext._evaluateInternal (node_modules/puppeteer/lib/ExecutionContext.js:122:13)
.
:

Думал, что я бросил бы это здесь, чтобы видеть, столкнулся ли кто-нибудь еще с этим странность. Это не должно провалиться ни по каким нормам, и я не могу понять это вообще. Пожалуйста, помогите мне! Любые идеи / направления будут с благодарностью.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Хорошо, через неделю после того, как я задал этот вопрос, я просто поднял тест, чтобы решить эту проблему. Я просто не думал о приведенном ниже коде. Я думаю, что смотреть на код в течение нескольких часов, который ломается без причины, может сделать это для вас.

Просто сделайте преобразование после оценки ..

import {convert} from '../__helpers__/number';

const getAmount = async (page) => {
  const element = await page.waitForSelector('.my-element');
  const amountString = await element.evaluate((node) => node.innerText);

  return convert(amountString);
}

И спасибо @ plat123456789 за ваш ответ , очень признателен!

0 голосов
/ 18 февраля 2020

вам нужно передать функцию преобразования в качестве параметра elementHandle.evaluate (pageFunction [, ... args]) следующим образом:

import {convert} from '../__helpers__/number';

const getAmount = async (page) => {
  const element = await page.waitForSelector('.my-element');

return element.evaluate((node, convert) => convert(node.innerText), convert);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...