Тест-кейс для угловых сервисов с включенным методом пут - PullRequest
0 голосов
/ 13 февраля 2019

Я узнаю о тестовых случаях с жасмином и кармой.Я сделал угловой сервис, который обновляет некоторые записи в базе данных.Я создавал тестовые случаи раньше, на самом деле не эксперт, но никогда не для методов, которые помещают обновления в базу данных.

Это мой основной сервис с одним методом:

import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";

@Injectable({
  providedIn: 'root'
})
export class WordsService {

  constructor(protected http: HttpClient) {}

  associate(uuid: string, item):any {

    const url = 'update/associate' + uuid;
    this.http.put(url, item).subscribe(response => {
      return response;
    }, error => {
      console.log(error)
    });
  }
}

И мойtest выглядит следующим образом.

describe('WordsService', () => {
  let httpMock: HttpTestingController;
  let ordsService: WordsService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule],
      providers: [WordsService]
    });
  });

  httpMock = getTestBed().get(HttpClientTestingModule);
  sentimentTuningService = getTestBed().get(SentimentTuningService);

  it('should be updated', inject([SentimentTuningService], async(service: WordsService) => {
    expect(service).toBeTruthy();

    let mockWordId: string = "37945b85-f6a8-45fd-8864-f45f55df8c78";

    let mockData = {
      label: "My Cool label",
      word_config: "c836468f-1fb4-4339-b5a1-ebf72aa1c6a5",
      uuid: "37945b85-f6a8-45fd-8864-f45f55df8c78",
    };

     WordsService.associate(mockWordId, mockData)
      .subscribe(result => {
        expect(result.status).toBe(201);
      });

  }));

});

Я не знаю точно, как предполагается подделать / смоделировать обновление в базе данных, и на самом деле, я не знаю, правильно ли я поступаю.

Очевидно, у меня проблемы с запуском теста.

enter image description here

Можете ли вы помочь мне дать представление о том, как мне нужнопроверить этот сервис?

1 Ответ

0 голосов
/ 13 февраля 2019

Юнит-тесты обычно не предназначены для того, чтобы охватить взаимодействие юнитов с базой данных, это больше сфера e2e-тестов (транспортир).Модульные тесты больше предназначены для охвата: «Мне дают это, я создаю это или реагирую таким образом».Все операции ввода-вывода должны быть сфабрикованы на этом уровне.

Существует множество доступных ссылок на ресурсы, предлагающих использовать шпионов и издевательства.Если ваша служба вызывает httpClient, она не должна проверять ввод-вывод действия от httpClient, а скорее проверять, как она реагирует на предоставленный I или O от httpClient (если я сказал это таким образом, который имеет смысл).

Базовая версия (может потребоваться настройка):

// inside of test
const spy = spyOn(httpClient, 'get').and.callThrough();

... call method
expect(spy).toHaveBeenCalled()

// or
const spy = spyOn(httpClient, 'get').and.callThrough();

... call method with <values>
expect(spy).toHaveBeenCalledWith(<values>)

...