Javascript 将JSON对象转换为响应对象
我试图将模拟JSON数据传递到我的jasmine单元测试中 我的JSON格式如下所示:Javascript 将JSON对象转换为响应对象,javascript,json,jasmine,aurelia,Javascript,Json,Jasmine,Aurelia,我试图将模拟JSON数据传递到我的jasmine单元测试中 我的JSON格式如下所示: { "CompanyResponse":{ "CompanyCreatedDate":"1990-10-02", "RunDate":"2", "LastChangedDate":"2015-10-02"
{
"CompanyResponse":{
"CompanyCreatedDate":"1990-10-02",
"RunDate":"2",
"LastChangedDate":"2015-10-02",
"CompanySummary": {
"Id":"Apple",
"MaximumCredit":"10000000",
"Margin":"60000000",
"Limit":"-1500000",
"HistoricData":{
"CompanyHistoricData": [
{
"LaunchDate":"2008-08-31",
"Product":"Iphone2",
"TotalProductsCreated":"1000000",
"TotalProductsSold":"800000",
"TotalReturns":"200000",
"TotalMargin":"600000"
},
{
"LaunchDate":"2010-08-31",
"Product":"Iphone4",
"TotalProductsCreated":"2000000",
"TotalProductsSold":"1500000",
"TotalReturns":"350000",
"TotalMargin":"800000"
}
]
},
"RefurbishedData": {
"CompanyRefurbished": [
{
"Id":"Apple.201221.12",
"ProductId":"iph-213454",
"StartDate":"2015-09-07",
"FinishDate":"2015-09-10",
"CostOfRefurbishing":"50"
},
{
"Id":"Apple.201228.12",
"ProductId":"iph-4155655",
"StartDate":"2015-09-10",
"FinishDate":"2015-09-12",
"CostOfRefurbishing":"85"
}
]
}
}
}
}
我正在使用上面的JSON传递给一个函数,该函数与下面的函数类似,用于单元测试:
public getTotal(response: CompanyResponse): void {
var companySummary = response.CompanySummary;
//gets total 'CostOfRefurbishing' for all phones
var totalRefurbishmentAmount :number = 0;
for (let companyRefurbishments of companySummary.RefurbishedData) {
totalRefurbishmentAmount += Number.parseInt(companyRefurbishments.CostOfRefurbishing.toString());
}
}
我面临的问题是,我无法将
CompanyResponse
作为一个整体传递给getTotal()
函数。即使我使用JSON.stringify()
,它也不起作用,因为它只是将其转换为字符串,而如果我使用JSON.parse()
将其转换回对象格式,它也不起作用
以下是我们在正常情况下如何调用getTotal()
方法:
export class MyService{
async CompanySummary(): Promise<CompanySummaryResponse>
{
const response = await this.http.fetch('CompanySummary');
return await response.json();
}
}
var myService = new MyService();
CompanySummary: CompanySummaryResponse;
CompanySummary = await myService.CompanySummary();
this.calculator.getTotal(CompanySummary);
导出类MyService{
async CompanySummary():承诺
{
const response=wait this.http.fetch('CompanySummary');
return wait response.json();
}
}
var myService=new myService();
公司摘要:公司摘要回复;
CompanySummary=等待我的服务。CompanySummary();
这个.calculator.getTotal(CompanySummary);
干杯,
Guru您可以使用模拟响应对象吗
如果查看-它接受一个body
参数和一个init
options对象。body
参数可以是Blob,因此您可以
var data = {foo: "bar"};
var blob = new Blob([JSON.stringify(data, null, 2)], {type : 'application/json'});
var init = { "status" : 200 , "statusText" : "SuperSmashingGreat!" };
var myResponse = new Response(blob, init);
这将创建一个
响应
对象,您应该能够通过该对象进行测试。数据中的重新分配
在哪里?您需要公司响应
拥有一个构造函数,该构造函数将该对象或从该对象派生的东西作为parameter@torazaburo对不起,我的错。它在JSON中的刷新数据,而不是Reallocations@arboreal84,这是单元测试的一部分,我不想为了使单元测试正常工作而重组我的程序。在实际场景中,它是一个HTTP调用,为我提供了真正的JSON响应。getTotal函数抱怨当您正常使用getTotal
时,无法接受类型为“Response”@gurudutshenoy的参数-传递给它的是什么?已经添加了一个对getTotal()的正常调用以及服务调用,通过该调用,它可以获取上面问题最后一部分中的JSON数据。现在问题解决了。问题实际上是将父元素“CompanyResponse”作为JSON文件的一部分传递。使用前面提到的FetchApi中的标准响应接口返回预期响应。非常感谢你的帮助:)我的荣幸@gurudutshenoy-很高兴你把它整理好了!