【发布时间】:2016-05-18 00:42:04
【问题描述】:
我有一个 web 组件,它创建一个 shadow DOM 并将一些 html 添加到它的 shadowRoot。
class SomeThing extends HTMLElement {
attachedCallback () {
this.el = this.createShadowRoot();
this.render();
}
render () {
this.el.innerHTML = '<h1>Hello</h1>';
}
}
export default SomeThing;
我正在 webpack 及其 babel-core 和 babel-preset-es2015 插件的帮助下编译它。
我也在使用 Karma 和 Jasmine 来编写我的单元测试。这就是它的样子。
describe('some-thing', function () {
var someElement;
beforeEach(function () {
someElement = document.createElement('some-thing');
});
it('created element should match string representation', function () {
var expectedEl = '<some-thing></some-thing>';
var wrapper = document.createElement('div');
wrapper.appendChild(someElement);
expect(wrapper.innerHTML).toBe(expectedEl);
});
it('created element should have shadow root', function () {
var wrapper = document.createElement('div');
wrapper.appendChild(someElement);
expect(wrapper.querySelector('some-thing').shadowRoot).not.toBeNull();
})
});
我想看看我的元素的 shadowRoot 中是否有东西,并想为在 shadowRoot 中创建的 HTML 和事件编写测试用例。但是第二次测试失败了。无法将 shadowRoot 添加到 some-element DOM。
如果有人可以帮助我,那将很有帮助。
我还在 Github 上上传了完整的测试工作项目。您可以通过此链接访问它https://github.com/prateekjadhwani/unit-tests-for-shadow-dom-webcomponents
提前致谢
【问题讨论】:
-
你的自定义元素真的创建了吗?您可以在 attachCallback 方法中添加 console.log。
-
是的,它被创建了。如果您看到 repo 链接,则 demo.html 文件会显示输出。虽然我不确定单元测试。我在测试用例中做错了吗?添加元素的方式不正确吗?
-
demo.html 并不能证明自定义元素是注册和创建的。但是如果你能读到“hello”这个标题,就说明它已经创建好了。
-
是的,我也在考虑同样的事情。问题是如何在测试用例中确认它。该元素在生成的 webpack 构建文件中注册。整个班级都被包裹在一个闭包中。所以我认为我根本无法访问它的对象。
-
我可以用 selenium-webdriver 做到这一点,所以我想 karma 也可以。
标签: karma-jasmine web-component shadow-dom