玩笑-ReferenceError:导入的函数未定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩笑-ReferenceError:导入的函数未定义相关的知识,希望对你有一定的参考价值。

我现在已经呆了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');

我尝试了所有可以想到的方式进行调试:

  • 已清除的缓存
  • 尝试重命名文件
  • 重新启动系统
  • 在不同系统中运行测试
  • 没有缓存等的笑话正在运行

也尝试过此方法:

// 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)
.
:

我想把它扔在这里,看看是否有人遇到这种怪异现象。它不应该以任何规范失败,我根本无法弄清楚。请帮我!任何想法/方向将不胜感激。

谢谢!

答案

您需要像这样将转换函数作为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);
}
另一答案

好吧,自从我问了这个问题一个星期后,我刚拿回测试来解决这个问题。我只是没有想到下面的代码。我想盯着代码看几个小时,无缘无故就可以解决这个问题。

仅在评估后进行转换..

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的回答,非常感谢!

以上是关于玩笑-ReferenceError:导入的函数未定义的主要内容,如果未能解决你的问题,请参考以下文章

Rails:ReferenceError:未定义谷歌

ReferenceError:在开玩笑测试中没有定义 React

带有 Jest 的打字稿 - “ReferenceError:未定义 beforeAll”

开玩笑地监视模块功能

ReferenceError:从“apollo-boost”导入 ApolloClient 时未定义要求

未定义子或函数过程