gpt4 book ai didi

javascript - 如何对使用 "compose"构建的自定义元素进行单元测试?

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:06 25 4
gpt4 key购买 nike

我有一个简单的“工厂”元素,如下所示。

<template>
<compose repeat.for="segment of segments"
view-model.bind="segment.ViewModelClass"
model.bind="segment.Model"></compose>
</template>

我正在尝试使用类似下面的方法对该组件进行单元测试。

let component: ComponentTester<MyFactory> = StageComponent.withResources("MyFactory/MyFactory");
component.inView("<my-factory segments.bind='segments'></my-factory>")
.boundTo({ segments })
.create(bootstrap)
....

但是,当我这样做时,出现以下 DI 错误。

Error: Error invoking Compose. Check the inner error for details.

Inner Error Stack: Error: Constructor Parameter with index 0 cannot be null or undefined. Are you trying to inject/register something that doesn't exist with DI? at Object.invokeWithDynamicDependencies (webpack-internal:///./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js:449:13)...

有人可能会说我正在测试一段代码 (compose),它不是我的,并且已经过单元测试。但问题是当我在 my-other-custom-element 中使用 my-factory 自定义元素时,仅使用 my-factory 就会中断my-other-custom-element 的所有测试用例由于相同的错误。 my-factory 的用法如下所示。

<template>
<require from="path/to/MyFactory"></require>
...
<my-factory segments.bind="segments"></my-factory>
...
</template>

这就是原因,我需要修复这个错误。

看来这个错误是因为compose的第一个ctor参数是DOM.Element,它是由aurelia-pal<初始化的。而且似乎在测试时的初始化过程中,正确初始化 pal 时出现了一些问题(并且顺序正确?)。有什么办法可以纠正这种情况?可能正在使用手动处理的生命周期?但是,由于我不太确定如何进行,请提出建议。

最佳答案

现在已经解决了,问题是因为调整对 Element 类的引用的 PLATFORM 特定代码没有先行运行。相关讨论https://discourse.aurelia.io/t/solved-how-to-test-a-view-with-a-named-slot/680/

解决方案是确保只有在应用程序代码中调用平台初始化后才会运行真正的测试代码。对于 Aurelia 方面,所有注入(inject)声明都已移入静态 inject() 函数中,因此不会再发生这种情况。

关于javascript - 如何对使用 "compose"构建的自定义元素进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50904442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com