Как создать жасминовый тест с помощью createSpyObj, свойства класса которого определены как spys - PullRequest
0 голосов
/ 06 апреля 2020

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

I ' я хотел бы иметь возможность сказать, какое значение этих свойств было установлено во время тестирования и что их можно проверить только для получения и установки.

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

  beforeEach(async(() => {
    taskServiceMock = jasmine.createSpyObj<TaskService>(
      ["getTasks"],
      ["searchString", "searchTaskStatus"]
    );

    TestBed.configureTestingModule({
      declarations: [SearchTaskComponent],
      providers: [{ provide: TaskService, useValue: taskServiceMock }],
    }).compileComponents();
  }))

Я также пытался передать шпионские объекты в поле свойств

const spySearchString = spyOnProperty(taskServiceMock, "searchString", "set");
const spyTaskStatus = spyOnProperty(taskServiceMock, "searchTaskStatus", "set");

  beforeEach(async(() => {
    taskServiceMock = jasmine.createSpyObj<TaskService>(
      ["getTasks"],
      [spySearchString, spySearchTaskStatus]
    );

    TestBed.configureTestingModule({
      declarations: [SearchTaskComponent],
      providers: [{ provide: TaskService, useValue: taskServiceMock }],
    }).compileComponents();
  }))

Сервисный код, над которым издеваются компонент

  private _searchStatus: TaskStatus;
  private _searchString: string;

  set searchString(search: string) {
    this._searchString = search;
  }

  set searchTaskStatus(status: TaskStatus) {
    this._searchStatus = status;
  }

В обоих случаях я получаю сообщение об ошибке, указывающее, что модуль не будет компилироваться, поэтому я проверяю неопределенное значение. Версия Жасмин 3,5 Angular Версия 9.0.2

1 Ответ

0 голосов
/ 07 апреля 2020

Если услуга действительно настолько проста, я бы просто предоставил ее и не беспокоился о насмешках над ней.

TestBed.configureTestingModule({
      declarations: [SearchTaskComponent],
      providers: [TaskService],
    }).compileComponents();

Если это не то, что вам нужно, попробуйте вместо этого использовать useClass.

(Макет такой же, как ты мне показал)

class MockTaskService {
  private _searchStatus: TaskStatus;
  private _searchString: string;

  set searchString(search: string) {
    this._searchString = search;
  }

  set searchTaskStatus(status: TaskStatus) {
    this._searchStatus = status;
  }
}
......
let taskService: any;
...
TestBed.configureTestingModule({
      declarations: [SearchTaskComponent],
      providers: [{ provide: TaskService, useClass: MockTaskService}],
    }).compileComponents();

taskService = TestBed.inject(TaskService); // get a handle on it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...