Angular SpyOn publi c собственность - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно шпионить за недвижимостью c в сервисе angular. Но у этого свойства нет геттера или сеттера, поэтому я не мог следить за этим свойством.

Для использования этого SpyOn всегда требуется получить или установить. Если я не предоставлю это, оно будет установлено как «получить». Есть ли другой способ издеваться или шпионить за свойством publi c без получения или установки? И почему эти методы недоступны? Использую ли я анти-шаблон , выставляя свойство publi c из сервиса?

Это код с переменной publi c, который мне нужно смоделировать:

@Injectable()
export class StudentService {

  public students = [];
  .................

}

Ответы [ 2 ]

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

Я бы использовал jasmine.createSpyObj и затем прикрепил бы его к этому объекту.

Попробуйте:

describe('Your component test', () => {
  let mockStudentService: any;

  beforeEach(async(() => {
    mockStudentService = jasmine.createSpyObj('studentService', []); 
    // in the empty array put the public methods you require as strings
    mockStudentService.students = []; // mock the public array you want here
    TestBed.configureTestingModule({
      providers: [{ provide: StudentService, useValue: mockStudentService }],
    }).compileComponents();
  }));
});
0 голосов
/ 01 апреля 2020

Вам не нужно шпионить за отдельными свойствами, потому что они не содержат никаких бизнес-логи c. Одна из целей тестирования - убедиться, что функциональность работает так, как нужно. Поэтому вам действительно нужно тестировать только методы, а в некоторых случаях проверять, как они влияют на ваши свойства, например expect(component.students).equaltTo(mockStudents2).

...