0

How do I return two different values from this mock service when I am providing it in the initial test for the component? I want to be able to return two different values for two different tests from mock service

describe('example', () => {
  let component: ExampleComponent;
  let fixture: ComponentFixture<ExampleComponent>;

  let mockService: Partial<MockService>;

  beforeEach(async(() => {

    mockService = {
      mockMethodSpy: jasmine.createSpy('mockMethod')
    };

    TestBed.configureTestingModule({
      declarations: [ ExampleComponent],
      imports: [],
      providers: [
        { provide: MockService, useValue: mockService },
      ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ExampleComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should return true from mock service', () => {
    expect(mockService.mockMethodSpy).toBe(true);
  });
  it('should return false from mock service', () => {
     expect(mockService.mockMethodSpy).toBe(false);
  });
});
milanf
  • 116
  • 2
  • 8

1 Answers1

1

spy can be configured on the fly. just call the configuring methods, and it will behave differentrly

it('should 1', () => {
  mockService.mockMethodSpy.and.returnValue(12345);
  expect(mockService.mockMethodSpy()).toBe(12345);
});

it('should 2', () => {
  mockService.mockMethodSpy.and.callFake(() => 54321);
  expect(mockService.mockMethodSpy()).toBe(54321);
});
satanTime
  • 12,631
  • 1
  • 25
  • 73
Andrei
  • 10,117
  • 13
  • 21