在单元测试中,如何实例化自定义元素(或视图)并访问 live DOM元素?
我阅读了this article,它实现了自定义元素的实例,但我不认为我可以访问DOM元素。
顺便说一句,我知道有关量角器和端对端测试,但这不是我在这里寻找的。 p>2016年10月14日更新:
我发现我可以注册这样的实例来使@inject(Element)
工作:
container = new Container().makeGlobal();
container.registerInstance(Element, document.createElement('div') );
vm = BehaviorInstance.createForUnitTest(Test, {}, {});
虽然注入工作(我的Test自定义元素获得引用),但这并不会导致aurelia对元素执行任何操作。我的自定义元素模板尚未使用,因此元素innerHtml
为<div></div>
。
答案 0 :(得分:2)
我们正在探索创建使用实际DOM元素的集成测试的方法,因为我们为一些内置的自定义元素/属性构建了一个更强大的测试套件。查看this branch中的提交以获取更多详细信息。
这是自定义元素的单元测试: https://github.com/aurelia/templating/blob/master/test/behavior-testing.js#L57
要访问实际的DOM元素,请使用Aurelia的依赖注入容器:
import {inject} from 'aurelia-framework';
@inject(Element)
export class MyViewModelOrCustomElementOrAttribute {
constructor(element) {
// use the element
this.element = element;
}
}
单元测试会有类似的结果:
let myvm =BehaviorInstance.createForUnitTest(MyViewModelOrCustomElementOrAttribute, attributesFromHTML, bindingContext);
let actualDomElement = myvm.element;