私はこれと戦っている別の問題にぶつかりました...私は同期呼び出しであり、メソッドは、promise、async、methodを呼び出します。私のアプリでTDD:Sinon 2.xとasyncを使用する同期メソッドをテストしようとしています
私は、次のしている:
export class App {
constructor(menuService) {
_menuService = menuService;
this.message = "init";
}
configureRouter(config, router) {
console.log('calling configureRouter');
_menuService.getById(1).then(menuItem => {
console.log('within then');
console.log(`configureRouter ${JSON.stringify(menuItem, null, 2)}`);
const collection = menuItem.links.map(convertToRouteCollection);
console.log(`collection ${JSON.stringify(collection, null, 2)}`);
//I think there is an issue with asyn to synch for the test
config.map(collection);
}).catch(err => {
console.error(err);
});
console.log('calling configureRouter assign router');
this.router = router;
}
}
私がどんなに私ながら、私は、configMockStubは常にfalseを得るために何を得る、モカ
...
it('should update router config', function() {
const expectedData = {
name: "main menu",
links: [{
url: '/one/two',
name: 'link name',
title: 'link title'
}]
};
const configMapStub = sinon.stub();
const config = {
map: configMapStub
};
const routerMock = sinon.stub();
let app = null;
const actualRouter = null;
let menuService = null;
setTimeout(() => {
menuService = {
getById: sinon.stub().returns(Promise.resolve(expectedData).delay(1))
};
app = new App(menuService);
app.configureRouter(config, routerMock);
}, 10);
clock.tick(30);
expect(app.router).to.equal(routerMock);
expect(menuService.getById.calledWith(1)).to.equal(true);
//console.log(configMapStub.args);
expect(configMapStub.called).to.equal(true);
const linkItem = expectedData.links[0];
const actual = [{
route: ['', 'welcome'],
name: linkItem.name,
moduleId: linkItem.name,
nav: true,
title: linkItem.title
}];
console.log(`actual ${JSON.stringify(actual, null, 2)}`);
expect(config.map.calledWith(actual)).to.equal(true);
});
...
以内に次のことを試したんきたテストmenuService.getById.calledWith(1).to.equal(true)をtrueに設定しています。 上記のテストは、「時間」を過ぎて試してみる試みでした。私はそれを試したことがなく、同じように失敗しました。 私は実際にこれをテストする方法に関するアイデアを驚かせています。たぶん私は、このメソッド内の約束を参照するコードを間違っている。
唯一のことは、configureRouterメソッドを選択する必要がないということです。どんな指導も高く評価されます。
ありがとうございます! ケリー
一般的に言えば、主な問題は、 'configureRouter'も適切なasyncでなければならないということです。そうでなければ、テストできる唯一の方法はハッキングです。 – robertklep