描述,它,之前,之后,箭头函数,未命名的函数和“这个”,效用还是徒劳?[复制]

Describe, It, Before, After, Arrow Functions, unnamed functions and "this", utility or futility? [duplicate]

提问人:user3583204 提问时间:5/13/2023 更新时间:5/13/2023 访问量:31

问:

我们目前正在更新我们的 linting,以匹配前端开发人员的 linting 想法。主要是因为他们希望能够查看和理解我们的测试代码。我们都在用 JavaScript 工作。 没什么大不了的...或者是吗? 我们发现,以我们执行 WDIO “Describes” 和 “Its” 的“旧方式”,我们可以简单地使用一个未命名的函数,并且它只是工作。 我们已经开始更新箭头函数,从表面上看,它们“看起来是一样的”,但工作方式并不相同。 我们的问题出在“this”的使用上...... 我们使用的是“重试”方法,并在配置文件中设置重试次数。在某些测试中,我们需要知道当前运行是第一次运行还是第一次重试。 为此,我们抓取它将告诉我们“0”表示主要运行,或“1”表示第一次重试,或“2”表示第二次重试,依此类推。 你不知道吗?“未命名函数”让我们可以毫无问题地使用“this”。linting 给了我们一个关于“没有未命名函数”的警告...... 当我们将其转换为“箭头函数”时,我们得到“this.wdioRetries === undefined”。“this”在箭头函数的作用域中不存在。但是 linting 喜欢箭头功能,即使测试现在失败了。 有时,我们还需要覆盖某些测试值,例如默认超时。如果没有访问“this.test”,我们就无法做到这一点......it('No Place Like Home', async function () {this.wdioRetries

所以。问题是,我们如何在箭头函数中得到“this”?有没有办法传进去?一种通过另一种方式(进程、浏览器、驱动程序......一些内置函数来调用()?const thing = whatever.getThis()

或者,这是徒劳的?我们应该继续使用未命名的函数吗?

我试过了:我试过简单的功能,等等。问题在于范围,它需要处于 TEST 级别,而不是 GLOBAL。 希望其他人在我之前开辟了这条道路并找到了解决方案。it('No Place Like Home', async () => {it('No Place Like Home', async (this) => {it('No Place Like Home', async this => {

JavaScript 函数 this arrow-functions wdio

评论

0赞 Barmar 5/13/2023
this箭头函数的工作方式与传统函数不同。因此,您不应该对使用 .this
0赞 VLAZ 5/13/2023
解决方案很简单 - 更改 linting 规则。您可以对子目录执行此操作,也可以仅对测试代码(无论它位于何处)执行此操作。试图以某种方式强制箭头函数工作,而不是规范描述它们的方式,这是一个 XY 问题
0赞 Dave Newton 5/13/2023
这是第一段。目前尚不清楚为什么需要;WDIO是什么都需要它吗?还是因为您以这种方式设置了测试?this
0赞 VLAZ 5/13/2023
测试库经常使用@DaveNewton来共享测试数据和配置。设置可以在每个测试之前/之前完成,然后每个测试都可以访问它。thisthis
0赞 Dave Newton 5/13/2023
@VLAZ嗯,这比使用 s 有优势吗?我必须检查一下,但我不确定我是否曾经在 Mocha 或我使用过的其他 JS 测试库中使用过。letthis

答: 暂无答案