【问题标题】:getting error in calling a service while running angular2 unit tests with jasmine使用 jasmine 运行 angular2 单元测试时调用服务时出错
【发布时间】:2017-07-18 06:42:57
【问题描述】:

我正在测试一个 Angular 服务,我已经在 typescript 中编写了代码,但是当我运行我的测试用例时,我收到错误,因为“this.someFunction.show()”不是函数,并且“this.someFunction.show()”不是函数。 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 不。

【问题讨论】:

  • 如果错误在服务中然后不在 .spec 中,那么不是测试错误而是服务错误,对吗?还是我没听懂?

标签: angular unit-testing typescript karma-jasmine


【解决方案1】:

解决了这个问题,我必须在“myService.spec.ts”中为“this.serviceN.show(request);”添加模拟函数" 文件,它工作正常,因为我试图测试的服务正在调用一些进一步的组件,当单元测试调用它时,它无法在不同的服务中找到对进一步方法的正确引用,所以它是失败。模拟这些依赖项为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2016-06-23
    • 2020-05-30
    相关资源
    最近更新 更多