2016-10-02 2 views
1

Я пытаюсь протестировать службу, которую я построил, что делает некоторые асинхронные работы за кулисами. Имейте в виду, что я использую mocks, которые немедленно разрешают обещание, поэтому реальная работа async на самом деле не происходит.Angular2 тестирует отклоненное обещание с fakeAsync

Мой тест выглядит следующим образом:

it('should reject promise when condition is met', 
    inject([MyService], fakeAsync((myService: MyService) => { 
    let rejected = false; 

    myService.doSomeAsyncWork().catch(() => { 
     rejected = true; 
    }); 
    tick(); 

    expect(rejected).toBe(true); 
    })) 
); 

Когда я запускаю это я получаю следующее сообщение об ошибке:

Error: 2 timer(s) still in the queue. 

Если изменить клеща() будет тикать (1000), то это говорит мне только 1 таймер все еще находится в очереди. Если я вызову tick() несколько раз, это не имеет значения.

Что я делаю неправильно?

Спасибо!

ответ

1

я в конечном итоге удаление fakeAsync для этого и просто с помощью классического «ГОТВО()» подход:

it('should reject promise when condition is met', done => { 
    let rejected: boolean; 

    myService.doSomeAsyncWork().then(() => { 
    rejected = false; 
    },() => { 
    rejected = true; 
    }).then(() => { 
    expect(rejected).toBe(true); 
    done(); 
    }); 
}); 
Смежные вопросы