我正在测试一个 Angular 服务,我已经用打字稿编写了代码,但是当我运行我的测试用例时,出现“this.someFunction.show()”不是一个函数和“this.someFunction.show”的错误()" 在我的实际服务中。这就是我想要做的。
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);
}
这是我的cash-payment-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。
解决了这个问题,我不得不在我的“ myService.spec.ts ”文件中为“ this.serviceN.show(request); ”添加模拟函数并且它工作正常,因为我试图测试的服务正在进一步调用组件,当单元测试调用它时,它无法在不同的服务中找到对进一步方法的正确引用,因此它失败了。嘲笑这些依赖关系为我解决了这个问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句