How override Provider in Angular 5 for only one test?

前端 未结 5 2114
刺人心
刺人心 2020-12-17 07:52

In one of my unit test files, I have to mock several times the same service with different mocks.

import { MyService } from \'../services/myservice.service\'         


        
5条回答
  •  长情又很酷
    2020-12-17 08:33

    If you need TestBed.overrideProvider() with different values for different test cases, TestBed is frozen after call of TestBed.compileComponents() as @Benjamin Caure already pointed out. I found out that it is also frozen after call of TestBed.get().

    As a solution in your 'main' describe use:

    let someService: SomeService;
    
    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                {provide: TOKEN, useValue: true}
            ]
        });
    
        // do NOT initialize someService with TestBed.get(someService) here
    }
    

    And in your specific test cases use

    describe(`when TOKEN is true`, () => {
    
        beforeEach(() => {
            someService = TestBed.get(SomeService);
        });
    
        it(...)
    
    });
    
    describe(`when TOKEN is false`, () => {
    
        beforeEach(() => {
            TestBed.overrideProvider(TOKEN, {useValue: false});
            someService = TestBed.get(SomeService);
        });
    
        it(...)
    
    });
    
    

提交回复
热议问题