私は要素を持っています:
<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>
light dom が初期化された後にテストを実行する方法がわかりません。添付されたイベントをリッスンしようとしましたが、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"));
});
});