我正在尝试创建一个外部模块,我可以在其中设置运行黄瓜测试的预设。
这个外部模块有@cucumber/cucumber
作为 peerDependency,所以它不会直接安装它。 因此,此依赖项允许预设设置World
构造函数以及将Given
、 When
、 Then
到全局范围,因此我们可以有更清晰的步骤定义。
当我将 Cucumber-js 选项标志作为cucumber-js --require ./test-preset.setup.js
链接到本地文件时,这一切都有效,但是,一旦将相同的预设移动到外部模块并要求将其作为cucumber-js --require-module cucumber-preset-foo
,该过程以 #1326 中出现的相同错误结束。
我可以在 cli 源代码上发现一些东西,其中supportCodeLibraryBuilder.reset
在通过supportCodeRequiredModules
需要这些外部模块之后被立即调用,一旦其数据被重置,这可能会与正在运行的黄瓜实例进行无法进行的交互紧随其后。
也许这种设计有一个特定的原因,但是我想检查一下在需要模块之前调用reset方法是否有任何暗示,以便我们可以使用那些便携式预设? 我可以看到这种功能使一些希望将预设用于特定开发环境(例如 react e2e)的用户受益。
node: v15.8.0
@cucumber/cucumber: 7.1.0
os: Linux
嗨@zanona
你的模块看起来很有趣
你也对这个问题进行了调查
由于您已经对正在发生的事情以及如何解决问题有了很好的了解,您认为您可以为此打开 PR 并支持围绕该问题的讨论吗?
嗯,我认为将重置移动到 require-module 之前没有任何问题。 它更多的是过去使用 require-module 的产品,它的主要用例是设置转译器(打字稿/ babel)
听起来很棒的家伙。
我当然可以准备一个 PR,也许我们可以将它作为一个功能而不是一个错误,所以我可以准备范围为用户的测试,能够创建自定义预设并确保测试运行器理解它?
或者,我们可以简单地交换这两行并观察失败的测试?
您希望如何进行?
关于黄瓜,这仍然是一个错误,因为在尝试以常规方式加载模块时出现意外错误,这应该可以正常工作。
但是您仍然可以像您描述的那样通过范围测试来增强您的 PR - 我实际上喜欢这个想法 - 这也有利于解决该问题。 你怎么认为?
关于交换两条线的可能性,这可能是 IMO 的第一个好的起点:)