无法在WCT

时间:2018-02-20 21:43:28

标签: polymer polymer-1.0 sinon web-component-tester

使用聚合物1和Web组件测试器...在chrome上使用shady dom进行测试。

在WCT中,尝试使用stub('sp-toast', { display: ()=> {} });存储spToast.display(),但我收到错误Attempted to wrap undefined property display as function ....我做错了什么?

我试图将其存根的原因是因为我在测试运行代码库时得到spToast.display is not a function

原始代码:

 showAgeWarning: function() {
    var spApp = Polymer.dom(document).querySelector('sp-app');
    var spToast = Polymer.dom(spApp.root).querySelector('sp-toast');

    var msg = "foo"
    spToast.display('information', msg);
  },

测试代码:

<test-fixture id="sp-veteran">
  <template>
    <h2>edit veteran</h2>
    <sp-app>
      <sp-toast></sp-toast>
      <sp-veteran>
      </sp-veteran>
    </sp-app>
  </template>
</test-fixture>

    setup(function() {
      replace('sp-app').with('fake-sp-app');
      replace('sp-ajax').with('fake-sp-ajax');
      stub('sp-value-dropdown', { setInvalidState: (state)=> {} });
      myEl = fixture('sp-veteran');
    });

  test('it should validate the veteran', function() {
      var spApp = Polymer.dom(myEl.root).querySelector('sp-app');
      var spToast = Polymer.dom(spApp.root).querySelector('sp-toast');
      sinon.stub(spToast, 'display');

1 个答案:

答案 0 :(得分:1)

当你得到Attempted to wrap undefined property display as function时,它意味着它无法替换不存在的方法。

如果您在测试中实际获得了var spToast = Polymer.dom(spApp.root).querySelector('sp-toast')的值,而且您的测试没有给display一个值,那么您可以设置它,然后设置为spToast.display = function() {};你应该能够设置一个间谍或你需要什么。

把它们放在一起,你可以拥有

test('it should validate the veteran', function() {
      var spApp = Polymer.dom(myEl.root).querySelector('sp-app');
      var spToast = Polymer.dom(spApp.root).querySelector('sp-toast');
      spToast.display = function() {};
      sinon.spy(spToast, 'display');
      // Trigger the side effect that would lead to `display` being called
      assert.equal(
        spToast.display.calledOnces,
        true
      );
});