Dalam pengujian unit saya, saya memiliki kelas layanan tiruan yang saya gunakan, MockWorkflowService, yang memiliki metode getActiveTask. Fungsionalitas default metode ini diperlukan untuk sebagian besar pengujian, namun ...

0
Timbo773 5 April 2021, 20:41

1 menjawab

Jawaban Terbaik

Inilah yang perlu Anda lakukan ketika Anda ingin over-ride hanya untuk tes tertentu. Apa yang Anda lakukan adalah mengesampingkan semua contoh layanan itu, yang salah. Anda dapat mengikuti ini:

// Define the service here: 
describe('MyComponent', () => {
  let workflowService: WorkFlowService // Add this line
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        MyComponent
      ],
      providers: [
        TranslateService,
        { provide: WorkflowService, useClass: MockWorkflowService }
      ]
    })
      .compileComponents();
  }));

// In before each, create an instance of the service
 beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
    workFlowService = TestBed.get(WorkflowService); // Add this line
    // TestBed.get should be TestBed.inject if you're using Angular 9+
  });


it('should ...', () => {
  // Spy on the service and return null
  // This will call the mock service class and return null for this test case

  spyOn(workFlowService, 'getActiveTask').and.returnValue(null);
  component.yourComponentMethodName();
  expect(component.yourComponentMethodName).toHaveBeenCalled();
});
1
AliF50 5 April 2021, 18:59