Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON对象转换为响应对象_Javascript_Json_Jasmine_Aurelia - Fatal编程技术网

Javascript 将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"

我试图将模拟JSON数据传递到我的jasmine单元测试中

我的JSON格式如下所示:

{   
   "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-很高兴你把它整理好了!