javascript - 开玩笑 - 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);
}
推荐阅读
- node.js - 当新用户连接之前的连接成为新用户
- xamarin.forms - 为什么设置 BindableProperty.DefaultValue 不调用 OnPropertyChanged?
- python - 具有变化比例的 PlotnineAnimation 引发错误:“第 1 帧绘图的填充比例与第一帧的限制不同。”
- python - 如何在单个窗口中绘制一堆包含元组的列表?
- python - univariate_data 函数在 python tensorflow 教程(熊猫数据框)中不起作用
- extjs - ExtJS 轮播动态添加项目
- xml - 生成类的自定义包名axis2-wsdl2code-maven-plugin
- r - 使用 R 的条形图
- xamarin - Xamarin Forms:System.Net.Http.HttpClient 通过 https 连接并且未命中 ServerCertificateValidationCallback
- visual-studio - 如何在项目文件中使用通配符将文件添加到 VS 解决方案资源管理器?