我的Angular组件中的代码部分如下所示:
for (const item of items) {
const boxItems = item.boxItems;
if (await self.hasID(boxItems)) {
// perform some logic
}
}
private async hasID(boxItems: BoxItems[]): Promise<boolean> {
for (const item of boxItems) {
let info = (await item.promise).json();
// test fails here, info remains undefined
// how to properly mock a Response object from a Promise at this point?
}
}
因为我使用.json()
,来自here,我很好奇我将如何在单元测试中嘲笑这个?
我现在正在这样做:
const MockBoxItem = {
promise: new Promise<any>((resolve, reject) => resolve(myData))
};
我应该做的事情是:
const MockBoxItem = {
promise: new Promise<any>((resolve, reject) => resolve(
new Response(new Body([JSON.stringify(myData)]))
)
};
我的单元测试失败,因为我怀疑我返回的模拟数据没有正确实现Response
对象,因此,不包含.json()
方法。
当我在本地测试此流时,回复的响应如下:
promise: ZoneAwarePromise
_zone_symbol_state: true
_zone_symbol_value: Response
headers: ...
ok: ...
status: ...
statusText: ...
type: ...
url: ...
_body: myData
由于
答案 0 :(得分:0)
const MockBoxItem = {
promise: new Promise<any>((resolve, reject) => resolve(
{
json:()=>{
return JSON.stringify(myData)
}
}
)
};
这里是JsFiddle https://jsfiddle.net/n932pvt3/1/
答案 1 :(得分:0)
在响应正文中包含{"foo":"bar"}
的响应模拟。
我认为response.json()
必须返回JSON.parsed对象的承诺。
const MockBoxItem = {
promise: Promise.resolve(new Response(JSON.stringify({foo:"bar"})))
}
async function asyncCall() {
const result = await MockBoxItem.promise
const data = await result.json()
console.log(data) // { foo: 'bar' }
}
asyncCall()