在单元测试中通过本地dom访问元素

时间:2017-06-25 21:39:01

标签: javascript polymer polymer-2.x

请考虑以下代码:

<test-fixture id="fixture-one">
    <template>
        <display-enter-button id="testEl"></display-enter-button>
    </template>
</test-fixture>

<script>
    suite('Query Selector Tests', function() {
        test('On click function called', function() {
            var circle = fixture('fixture-one').shadowRoot.querySelector('.btn');
            var proto = Document.getElementById('testEl').constructor.prototype;
            var func = sinon.spy(proto, '_btnClick');
            circle.click();
            sinon.assert.called(func);
    });
});
</script>

有没有办法重写所以我可以通过Polymer local DOM(这个。$ ..)访问proto元素。

而不是

var proto = Document.getElementById('testEl').constructor.prototype;

我寻找类似的东西:

var proto = this.$.testEl.constructor.prototype;

(我的例子不起作用..)

2 个答案:

答案 0 :(得分:2)

在测试中,您需要使用变量名称保持fixture对象。然后,您可以将其用作Web组件。

var el = fixture('fixture-one');
var circle = el.shadowRoot.querySelector('.btn');
var proto = el.constructor.prototype;

检查其ID; el.id应该等于'testEl'。

请记住,'this'在上下文中使用,您不能在元素本身之外使用它。在测试中,您应该使用this.$而不是el.$。另外,请记住,当您致电fixture()时,不会返回测试夹具本身;返回模板中的元素。

答案 1 :(得分:0)

使用var proto = fixture('fixture-one'); proto将显示 - 输入 - 按钮。

相关问题