使用Polymer 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');
发布于 2018-02-21 01:50:07
当你得到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
);
});
https://stackoverflow.com/questions/48894707
复制