我有一个元素:
<dom-module id="ens-page-router">
<template>
<iron-pages attr-for-selected="url">
<content select="ens-page"></content>
</iron-pages>
</template>
<script>
Polymer({
is: 'ens-page-router',
attached: function(){
//using async because the pages url will be undefined otherwise
this.async(function(){
var pages = this.getContentChildren()
var ironPages = this.$$('iron-pages');
pages.forEach(function(elem){
page(elem.url, function(){
ironPages.select(elem.url);
});
});
page();
});
}
});
</script>
</dom-module>还有一个测试装置:
<test-fixture id='underTest'>
<template>
<ens-page-router>
<ens-page url="/derp">
<div>derp</div>
</ens-page>
<ens-page url="/foo/bar">
<div>foo bar</div>
</ens-page>
</ens-page-router>
</template>
</test-fixture>我不知道如何在光环初始化后运行我的测试。我尝试过侦听附加的事件,但它从不触发,因为在调用夹具()之前,我无法注册。我也尝试过同步测试,但测试在启动附加事件之前运行。
describe("<ens-page-router>", function(){
var underTest;
var ironPages;
var selectSpy;
var routes = {};
//stub page.js
var fakePage = function(path, callback){
if(callback){
routes[path] = callback;
}else if(path){
routes[path]();
}
beforeEach(function(){
page = fakePage;
underTest = fixture('underTest');
ironPages = underTest.$$('iron-pages');
selectSpy = sinon.spy(ironPages, "select");
});
it('should select the derp page', function(){
page('/derp');
assert(selectSpy.calledWith("/derp"));
});
});发布于 2016-03-30 12:33:27
将测试包装在setTimeout中将允许加载dom。
it('should select derp as the current page', function(done){
waitForDom(function(){
page('/derp');
assert(selectSpy.calledWith("/derp"));
done();
});
});
function waitForDom(callback){
setTimeout(callback, 1);
}https://stackoverflow.com/questions/36297854
复制相似问题