在1.6.1版本中,破坏性更改不允许在测试中创建axios示例,

63lcw9qa  于 5个月前  发布在  iOS
关注(0)|答案(6)|浏览(95)

描述bug

在测试应用程序并尝试模拟axios(例如axios-mock-adapter,但通常任何axios.create()调用)时,我遇到了错误 "TypeError: Invalid URL",这是由于函数hasStandardBrowserEnv的1.6.1版本更改缺少函数isStandardBrowserEnv中的原始条件typeof window !== 'undefined' && typeof document !== 'undefined';所致。这导致尝试从文档位置创建和读取url路径,最终尚未初始化。

重现问题

在我的情况下,我在文件.../src/components/my-component/my-component.spec.ts中使用stencil找到了它:

npm init stencil
npm i axios-mock-adapter
npm i

在文件.../src/components/my-component/my-component.spec.ts中添加:

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';

const mockAdapter = new MockAdapter(axios);

代码片段

import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';

const mockAdapter = new MockAdapter(axios);

预期行为

要么有强制执行"nonstandardBrowser"的可能性,要么保留版本1.6.0的行为。

Axios版本

1.6.1

适配器版本

  • 无响应*

浏览器

puppeteer

浏览器版本

20,2,0

Node.js版本

21.1.1

OS

Windows 11

其他库版本

stencil 4.7.2

其他上下文/截图

  • 无响应*
qybjjes1

qybjjes11#

函数hasStandardBrowserEnv缺少原始条件:typeof window !== 'undefined' && typeof document !== 'undefined';
这段代码仍然存在,但已重构为外部常量。

7z5jn7bk

7z5jn7bk2#

这段代码仍然存在,但已重构为外部常量
@DigitalBrainJS - 是的,你说得对。经过进一步调查,我找到了可能的嫌疑人 - 在1.6.0版本中,platform.isStandardBrowserundefined。原因是常量是从lib/platform/browser/index.js定义和导出的,但这个模块没有被导入到helpers/isSameURLOrigin.js中。它的导入状态是:

import utils from './../utils.js';
import platform from '../platform/index.js';

platform/index.js的导入是:

import platform from './node/index.js';

export {platform as default}

不确定这是否最初是有意为之,但在将代码移动到1.6.1版本中的lib/platform/common/utils.js更改后,常量现在在测试环境中被评估,因此产生了破坏性更改。

hgqdbh6s

hgqdbh6s3#

我正在经历相同的问题。尝试从v0.x升级,主要是修复axios的主要版本中的一个公开漏洞,如这里所示 #6091 。然而,这个问题使得测试无法使用axios,已经成为阻塞。不可能获得一个带有漏洞修复的axios版本,同时测试仍在执行。

suzh9iv8

suzh9iv84#

你好,

有关于这个问题的解决方案吗?我在升级axios版本后遇到了axios-mock-adapter

2skhul33

2skhul335#

关于这个问题有什么新消息吗?它目前阻止我们进行更新,因为我们的所有测试(包括Axios)都失败了。

bt1cpqcv

bt1cpqcv6#

我遇到了与1.6.2版本相同的问题。有什么解决办法吗?

相关问题