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

Posted

技术标签:

【中文标题】开玩笑 - ReferenceError:未定义导入的函数【英文标题】:Jest - ReferenceError: imported function is not defined 【发布时间】:2020-05-29 17:05:49 【问题描述】:

我已经在这里待了 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)
.
:

我想我会把它扔在这里看看是否有其他人遇到这种奇怪的情况。它不应该按任何规范失败,我根本想不通。请帮我!任何想法/方向将不胜感激。

谢谢!

【问题讨论】:

看来,你的 babel 设置不正确。请检查配置。 github.com/puppeteer/puppeteer/issues/1665 【参考方案1】:

好的,自从我问了这个问题一周后,我才重新拿起测试来解决这个问题。我只是没有想到下面的代码。我想盯着代码看几个小时,无缘无故地中断,可以对你这样做。

在评估后进行转换..

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 for your answer,非常感谢!

【讨论】:

【参考方案2】:

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

【讨论】:

详细说明之前的评论:我收到convert is not a function 错误。

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

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

ReferenceError:未定义窗口。当我通过 jest 运行 npm test 进行单元测试时出现此错误

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

ReferenceError:未定义提取

未定义函数 - 未捕获的 ReferenceError

打字稿 - 未捕获的 ReferenceError:未定义导出