2017-07-18 66 views
1

我正在测试角度服务,我已经在打字稿中编写代码,但是当我运行测试用例时,出现“this.someFunction”错误。 show()“不是函数,并且”this.someFunction.show()“在我的实际服务中。 这是我想要做的。在运行与茉莉花angular2单元测试时调用服务时出错

myService.spec.ts

import { dep1, dep......m dep-n } from '../../../../some-modules'; 
describe('ServiceTest',() => { 
let cashPaymentHandlerService : CashPaymentHandlerService; 
it('for cash, when pick list enabled, 1 cash drawer, adds payment line',() => { 
    methodOne(); //work fine 
    methodTwo(false); //work fine 
    methodThree(true); //work fine  
    methodFour(); //work fine 
    methodFive(1); //work fine 
    methodSix(); //work fine 
    givenDependanciesAreMocked(); 
    whenHandlePaymentIsInvoked(); 
    expect(cashDrawerService.openCashDrawer).toHaveBeenCalled(); 
}); 

function givenDependanciesAreMocked(){ 
    TestBed.configureTestingModule({ 
providers: [ 
    {provide: ServiceOne, useValue: serviceOne}, 
    {provide: ServiceTwo, useValue: serviceTwo}, 
    {provide: ServiceN, useValue: serviceN}, 
    CashPaymentHandlerService 
] 
}); 
cashPaymentHandlerService = TestBed.get(CashPaymentHandlerService); 
} 

function whenHandlePaymentIsInvoked() : any { 
    cashPaymentHandlerService.handlePayment(cashPaymentRequest); 
} 

这里是我的现金付款handler.service.ts文件

import { dep1, dep......m dep-n } from '../../../../some-modules'; 

export class CashPaymentHandlerService { 
constructor(private service1 : Service1, 
      private service2: Service2, 
      private serviceN: ServiceN){ 
} 

handlePayment(cashPaymentRequest: CashPaymentRequest) { 
    let request = new service1(); 
    request.initialAmount = this.service2.dataModel.transactionDataModel.balance(); 
    request.onValueEntered = (response: AmountPromptResponse) => { 
    if (!response.cancelled){ 
     this.addCashPaymentLine(response.value, cashPaymentRequest); // runs fine 
    } 
    }; 
    this.serviceN.show(request); //getting error on this line 
} 

}

和代码ServiceN .ts

constructor(
private someController: SomeController){ 
} 

show(options?: NewRequest): void { 
if (!options){ 
    options = new NewRequest(); 
} 

this.someController.show(PromptComponent, options); // PromptComponent imported from some other component 
} 

我在许多论坛上搜索过解决方案,花了一整天的时间,但无法解决。任何帮助将不胜感激。 Meherbani hosi nay。

+0

如果错误在服务中,则不在.spec上,那么不是测试错误,而是服务错误,对吗?或者,也许我不太明白? – SrAxi

回答

0

解决这一点,我不得不添加功能嘲讽为“this.serviceN.show(请求);”在我的“myService.spec.ts”的文件,它工作得很好,因为我的服务我试图测试的是调用一些进一步的组件,并且当单元测试调用它时,它无法在不同的服务中找到适当的引用来访问其他方法,因此它失败了。嘲笑这些依赖关系解决了我的问题。