使用聚合物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');
答案 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
);
});