当我为角度测试进行测试时,我发现了这个错误。以下是我的代码的一部分。 失败:this.strategyService.getAllstrategys(...)。subscribe不是一个函数 TypeError:this.strategyService.getAllstrategys(...)。subscribe不是函数
//In strategyTables.component.ts
getStrategys():void{
this.strategyService.getAllstrategys(this.strategyname,this.isuseragent,this.iscookie,this.currentpage,this.itemsPerPage,this.sorts).subscribe(data=>{
this.totalItems=data.json().totalElements;
this.currentPage=data.json().number+1;
this.strategys=data.json().content;
for(var i=0;i<data.json().totalPages;i++){
this.totalnumbers[i]=i+1;
}
},
error => console.log(error),()=>console.log("获取到所有的urlmng"));
}
//In strategyTables.component.spec.ts
class MockStrategyTablesService extends StrategyTablesService{
//noinspection JSAnnotator
getAllstrategys(strategyname:string ,isuseragent:string ,iscookie:string ,page:number,
size:number,sorts:string){
return{
"content" : [ {
"id" : 11,
"strategyname" : "strategy11",
"isuseragent" : "是",
"depth" : 2,
"downloadDelay" : 3,
"iscookie" : "yes",
"agent" : null,
"starttime" : ""
}, {
"id" : 10,
"strategyname" : "策略",
"isuseragent" : "是",
"depth" : 2,
"downloadDelay" : 2,
"iscookie" : "否",
"agent" : "2",
"starttime" : "2017年2月2日 14:44:47"
}, {
"id" : 9,
"strategyname" : "策略9",
"isuseragent" : "是",
"depth" : 3,
"downloadDelay" : 5,
"iscookie" : "否",
"agent" : "1",
"starttime" : "2017年2月2日 14:41:56"
}, {
"id" : 6,
"strategyname" : "策略6",
"isuseragent" : "是",
"depth" : 10,
"downloadDelay" : 3,
"iscookie" : "否",
"agent" : null,
"starttime" : "2017-03-09 15:08:56"
}, {
"id" : 5,
"strategyname" : "策略5",
"isuseragent" : "是",
"depth" : 10,
"downloadDelay" : 3,
"iscookie" : "否",
"agent" : null,
"starttime" : "2017-03-01 15:08:53"
} ],
"last" : false,
"totalPages" : 2,
"totalElements" : 8,
"size" : 5,
"number" : 0,
"sort" : [ {
"direction" : "DESC",
"property" : "id",
"ignoreCase" : false,
"nullHandling" : "NATIVE",
"ascending" : false
} ],
"first" : true,
"numberOfElements" : 5
}
}
}
describe('strategyTable.component',()=>{
let compp;
beforeEach(()=>{
TestBed.configureTestingModule({
imports:[HttpModule,RouterTestingModule],
providers:[
StrategyTables,
{provide:StrategyTablesService,useClass:MockStrategyTablesService},
Location,
]
});
});
beforeEach(inject([StrategyTables],s => {
compp = s;
}));
it('test',async(()=>{
compp.getStrategys();
expect(compp.totalItems).toEqual(8);
}));
});
答案 0 :(得分:1)
getAllstrategys
的模拟实现返回一个普通对象而不是Observable
。您可以使用Observable
:
Observable.of
import { Observable } from "rxjs/Rx";
// ...
getAllstrategys(strategyname: string, isuseragent: string, iscookie: string, page: number,
size: number, sorts: string) {
var mockData = {
"content": [{
"id": 11,
"strategyname": "strategy11",
"isuseragent": "是",
"depth": 2,
"downloadDelay": 3,
"iscookie": "yes",
"agent": null,
"starttime": ""
},
// ...
],
"last": false,
"totalPages": 2,
"totalElements": 8,
"size": 5,
"number": 0,
"sort": [{
"direction": "DESC",
"property": "id",
"ignoreCase": false,
"nullHandling": "NATIVE",
"ascending": false
}],
"first": true,
"numberOfElements": 5
}
return Observable.of({
json: () => mockData
});
}