【问题标题】:Writing test cases for service file in typescript在打字稿中为服务文件编写测试用例
【发布时间】:2020-01-10 09:59:21
【问题描述】:

I am relatively new to writing test cases. 我有一个打字稿服务,我打算为其编写测试文件。它包含nested methods。它们不包含返回语句。我应该只为主要方法编写测试用例吗?由于它不包含no return 语句,我该如何测试我的文件?如果有人可以帮助我测试此文件,将不胜感激。

@Injectable()
export class MessageService {
  constructor(
    private readonly httpService: HttpService,
    private readonly messagePublishService: MessagePublishService,
    private readonly configService: ConfigService,
  ) {}
  message = new ProductMessage();
  publishMessages(productEvent: ProductEvent): Observable<any> {
    let json = '';

    const url = this.configService.get('SITEMAP_ENDPOINT');
    const urls = [url + '/sitemap/retrieve/ide', url + '/sitemap/retrieve/tpd'];
    try {
      for (let i = 0; i < urls.length; i++) {
        return https.get(urls[i], res => {
          res.on('data', chunk => {
            json += chunk;
          });
          res.on('end', () => {
            const result = JSON.parse(json);
            getProductCodes(productEvent, result, this.messagePublishService);
          });
        });
      }
    } catch (err) {
      console.error(err);
    }
  }
}

function getProductCodes(
  productEvent,
  result,
  messagePublishService: MessagePublishService,
) {
  const splitCodes = productEvent.productCodes.split(',');
  const splitvehicleType = productEvent.vehicleType.split(',');
  const source: string = 'PCS_DATACACHE_TOPIC_ARN';

  for (let i = 0; i < result.length; i++) {
    for (let j = 0; j < result[i].products.length; j++) {
      if (
        productEvent.productCodes.length !== 0 &&
        productEvent.productCodes !== undefined
      ) {
        searchProductCode(
          messagePublishService,
          splitCodes,
          result,
          i,
          j,
          source,
        );
      }  else {
        console.log('No data found');
        return;
      }
    }
  }
}

function searchProductCode(
  messagePublishService,
  splitCodes,
  result,
  i,
  j,
  source,
) {
  for (let k = 0; k < splitCodes.length; k++) {
    if (result[i].products[j].productCode === splitCodes[k]) {
      console.log(
        'Product Codes: ' +
          result[i].products[j].productCode +
          ' Country : ' +
          result[i].country +
          ' Language : ' +
          result[i].language,
      );
      const message: string =
        'Product Codes: ' +
        result[i].products[j].productCode +
        ' Country : ' +
        result[i].country +
        ' Language : ' +
        result[i].language;
      messagePublishService.publish(source, message);
    }
  }
}

【问题讨论】:

    标签: typescript testing jestjs


    【解决方案1】:

    对于此类情况,您可以使用spies。

    通过间谍,您可以检查是否正在调用某个类的方法(次数、给出的参数等)

    const spy = spyOn(messagePublishService, "publish");
    
    service.searchProductCode(...arguments);
    
    expect(spy).toHaveBeenCalledWith("expectedSource", "expectedMessage")
    

    【讨论】:

      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2015-09-18
      • 1970-01-01
      • 2018-12-11
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多