Cucumber-js: 在require-module下允许cucumber-preset模块

创建于 2021-04-13  ·  4评论  ·  资料来源: cucumber/cucumber-js

我正在尝试创建一个外部模块,我可以在其中设置运行黄瓜测试的预设。
这个外部模块有@cucumber/cucumber作为 peerDependency,所以它不会直接安装它。 因此,此依赖项允许预设设置World构造函数以及将GivenWhenThen到全局范围,因此我们可以有更清晰的步骤定义。

当我将 Cucumber-js 选项标志作为cucumber-js --require ./test-preset.setup.js链接到本地​​文件时,这一切都有效,但是,一旦将相同的预设移动到外部模块并要求将其作为cucumber-js --require-module cucumber-preset-foo ,该过程以 #1326 中出现的相同错误结束。

我可以在 cli 源代码上发现一些东西,其中supportCodeLibraryBuilder.reset在通过supportCodeRequiredModules需要这些外部模块之后被立即调用,一旦其数据被重置,这可能会与正在运行的黄瓜实例进行无法进行的交互紧随其后。

https://github.com/cucumber/cucumber-js/blob/e2fd32a4fe411484275307e2a4b59605a8ded165/src/cli/index.ts#L160 -L161

https://github.com/cucumber/cucumber-js/blob/e2fd32a4fe411484275307e2a4b59605a8ded165/src/support_code_library_builder/index.ts#L402 -L417

也许这种设计有一个特定的原因,但是我想检查一下在需要模块之前调用reset方法是否有任何暗示,以便我们可以使用那些便携式预设? 我可以看到这种功能使一些希望将预设用于特定开发环境(例如 react e2e)的用户受益。

node: v15.8.0
@cucumber/cucumber: 7.1.0
os: Linux
bug help wanted accepted

所有4条评论

@zanona

你的模块看起来很有趣
你也对这个问题进行了调查

由于您已经对正在发生的事情以及如何解决问题有了很好的了解,您认为您可以为此打开 PR 并支持围绕该问题的讨论吗?

嗯,我认为将重置移动到 require-module 之前没有任何问题。 它更多的是过去使用 require-module 的产品,它的主要用例是设置转译器(打字稿/ babel)

听起来很棒的家伙。
我当然可以准备一个 PR,也许我们可以将它作为一个功能而不是一个错误,所以我可以准备范围为用户的测试,能够创建自定义预设并确保测试运行器理解它?

或者,我们可以简单地交换这两行并观察失败的测试?

您希望如何进行?

关于黄瓜,这仍然是一个错误,因为在尝试以常规方式加载模块时出现意外错误,这应该可以正常工作。

但是您仍然可以像您描述的那样通过范围测试来增强您的 PR - 我实际上喜欢这个想法 - 这也有利于解决该问题。 你怎么认为?

关于交换两条线的可能性,这可能是 IMO 的第一个好的起点:)

此页面是否有帮助?
0 / 5 - 0 等级