首页 > 解决方案 > 如何为两个不同的测试从​​模拟服务返回不同的值?

问题描述

当我在组件的初始测试中提供它时,如何从这个模拟服务返回两个不同的值?我希望能够从模拟服务中为两个不同的测试返回两个不同的值

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);
  });
});

标签: angularkarma-jasmine

解决方案


间谍可以即时配置。只需调用配置方法,它的行为就会不同

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);
});

推荐阅读