ReferenceError: служба не определена - PullRequest
0 голосов
/ 01 июня 2018

Я пытался проверить службу, сообщение http, как этот код ниже.

Я следую этому сообщению для моего тестирования, но у меня есть ошибка.

МойСервисный код:

  public CreateProduct(newProd: Product): Observable<boolean> {
    .....
    let body = newProd.generateUrlencodedParameters(this.currentuser().token);
    return this.http.post(API.getUrl(Api.URLS.CreateProduct), body, {
      headers: headers
    })
      .map((response: Response) => {
        let res = response.json();

        if (res.StatusCode === 0) {
          return true;
        }
    }

Мой класс Продукт:

export class Product{
    id: number;
    prod_number: String;
    prod_name: string;

    constructor(obj: any) {
        this.id= obj.id;
        this.prod_number= obj.prod_number;
        this.prod_name= obj.prod_name;
    }
    public generateUrlencodedParameters(token: string, id?: number): string 
   {
        let urlSearchParams = new URLSearchParams();
        urlSearchParams.append('prod_number', this.prod_number.toString());
        urlSearchParams.append('prod_name', this.prod_name.toString());
        urlSearchParams.append('token', token);
        return urlSearchParams.toString();
    }
}

Я попробовал этот код, чтобы проверить мой сервисный код:

describe('Create Product ', () => {
    let trackerFormService: ProductService,
      mockService = {
        createProduct: jasmine.createSpy('createProduct').and.returnValue(Observable.of('your session object mock goes here'))
      };
        beforeEach(() => {
        TestBed.configureTestingModule({
          imports: [HttpModule],
          providers: [{
            provide: ProductService,
            useValue: mockService
          }] }); });

      beforeEach(inject([ProductService], (trackerFormService) => {
        service = trackerFormService;
      }));
      describe('createProduct', () => {
        it('add session ', () => {
          let fakeResponse = null;
          service.CreateProduct().subscribe((value) => {
            fakeResponse = value;
          }); }); });});

Результат:

ReferenceError: служба не определена

Подскажите, пожалуйста, какую-либо идею, как решить эту проблему, или какой-либо пример для тестирования поста службы.

Thnx.

1 Ответ

0 голосов
/ 01 июня 2018

Один из способов сделать это - изменить функцию beforeEach следующим образом:

    beforeEach(() => {
      TestBed.configureTestingModule({
          imports: [HttpModule],
          providers: [{
            provide: ProductService,
            useValue: mockService
          }] });
      service = TestBed.get(ProductService);
      });

Редактировать:

describe('Create Product ', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [HttpModule],
        providers: [{
          provide: ProductService,
          useValue: mockService
        }] });
    });
  it('add session ', inject([ProductService], (service: ProductService) => { 
        let fakeResponse = null;
        service.CreateProduct().subscribe((value) => {
          fakeResponse = value;
        });
      })
    });

Редактировать: вы можете использовать подделку для ProductService.Но это будет означать, что вы не тестируете ProductService.Я не уверен, что вы пытаетесь проверить здесь.

Вы можете попробовать: (Обратите внимание на переданный параметр)

    mockService = {
  createProduct: (newProduct) => jasmine.createSpy('createProduct').and.returnValue(Observable.of(false))
};

Или в новом файле создать следующий класс.

export class FakeProductService {
  public CreateProduct(newProd: Product): Observable<boolean> {
    return Observable.of(false);
  }
}

В вашем тестовом файле.

describe('Create Product ', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [HttpModule],
        providers: [{
          provide: ProductService,
          useClass: FakeProductService
        }] });
    });
  it('add session ', inject([ProductService], (service: ProductService) => { 
        let fakeResponse = null;
        service.CreateProduct(\*new Product()*\).subscribe((value) => {
          fakeResponse = value;
        });
      })
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...