【问题标题】:angular e2e testing : how to test Service inject(use) another services角度 e2e 测试:如何测试服务注入(使用)另一个服务
【发布时间】:2019-04-19 15:08:45
【问题描述】:

我正在尝试使用 e2e test angular 7 测试我的服务,我的问题是我不知道该怎么做:

这是我的服务,(方法返回 Observable):

import { Injectable } from '@angular/core';
import { UrlDecoratorService } from "../../common/url-decorator.service";
import { APIFetcherService } from "../common/api-fetcher.service";
import { Observable } from 'rxjs';
import { IALChrono, ALChrono } from '../../common/IALChrono.interface';

@Injectable()
export class AnnonceChronoDetailService {
    private months: string[];
    constructor(private urlDecoratorService: UrlDecoratorService, private apiFetcher: APIFetcherService) {
    }

    fetchData(chronoInfo: ALChrono): Observable<any> {
        // construct API parameters and URL
        var URL: string = this.urlDecoratorService.urlAPIDecorate("AL", "GetAccessChrono");

        var params = this.urlDecoratorService.generateParameters({
            year: chronoInfo.year,
            month: chronoInfo.month,
            sortBy: chronoInfo.sortBy,
            sortDirection: chronoInfo.sortDirection,
            pageNumber: chronoInfo.currentPage,
            pageSize: chronoInfo.pageSize
        });

        return this.apiFetcher.fetchJson(URL, params);
    }
}

它在我的服务中还有另外两个服务,UrlDecoratorServiceAPIFetcherService

这是我的 e2e 测试:

import { AppPage } from './app.po';
import { AnnonceChronoDetailService } from '../../src/app/services/annonce-legale/annonce-chrono-detail.service';
import { ALChrono } from '../../src/app/common/IALChrono.interface';
import { APIResponse } from '../../src/app/common/api-response.interface';
import { Observable } from 'rxjs';

describe('workspace-project App', () => {
  let page: AppPage;
  let service: AnnonceChronoDetailService;
  this.chronoInfo = new ALChrono(); //it's a class

  beforeEach(() => {
    page = new AppPage();
  });

  it('should display welcome message', () => {
    page.navigateTo();
    expect(page.getParagraphText()).toEqual('Welcome to MyProject!');
  });


  it('#getObservableValue should return value from observable', (done: DoneFn) => {
    service.fetchData(this.chronoInfo).subscribe((resp: APIResponse) => {
      expect(resp.dataCount).toBe(5);
      done();
    });
  });
});

我需要的是如何将 UrlDecoratorServiceAPIFetcherService 这两个服务注入我的 e2e 测试,或者如何测试注入另一个服务的服务?

如果您需要更多信息,请告诉我。

【问题讨论】:

  • 您的服务在运行 e2e 时应该已经可用,更新您遇到的错误帖子。你到底想测试什么?如果是您要测试的实际服务,则不应进行 e2e 测试,而应对其进行单元测试
  • @Lucho 这是my first post,我想测试服务返回的真实数据。
  • 所以你有一个真正的开发者。那么已经从服务器托管的应用程序了吗?如果是这样,您可以通过 url 直接将 Protractor 运行到该服务器并使用 Protractor 对其进行实时测试
  • 你的意思是e2e测试吗?
  • 因为我试试这个,see my post please

标签: angular protractor e2e-testing angular-test angular-e2e


【解决方案1】:

所以 e2e 测试的目的是实际试用你的应用程序的构建形式,基本上你已经完成了一个

构建

在您的应用程序上,然后您在本地托管(您也可以在外部进行)构建您刚刚创建的构建。

所以基本上你的服务包含在这些包中(在你的主包中更精确),所以你不需要设置任何配置,而是使用 browser 等的量角器 API 开始测试你的应用程序。 因此,在查看您的问题时,您的测试文件可能看起来更像这样:

  describe('workspace-project App', () => {
   let page: AppPage;
   this.chronoInfo = new ALChrono(); //it's a class

   beforeEach(() => {
     page = new AppPage();
   });

   it('should display welcome message', () => {
     page.navigateTo();
     expect(page.getParagraphText()).toEqual('Welcome to MyProject!');
   });
  }

因此,包含服务测试的代码应该包含在您的单元测试中 如果您不确定量角器的工作原理,我建议您阅读有关设置工作原理的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多