Спец не имеет ожиданий Angular 7 - PullRequest
0 голосов
/ 28 февраля 2019

Я использую Jasmine & Karma для модульного тестирования углового приложения.Я написал модульные тесты, подобные этому:

describe('#getAll', async () => {
    it('#should return user intergration_tester', inject([UsersService], async(service: UsersService) => {
        await service.getAll('integration_tester', access_token).subscribe(
            user => {
                expect(user[0].firstName).toContain('Integration');
                done();
            })
      }));

      it('#should return error 404', inject([UsersService], (service: UsersService) => {
        service.getAll('integration_tester', '').subscribe(
            user => {expect(user[0].firstName).not.toContain('Integration');},
            err => { expect(err).toContain('error');}
        )
      }));
})

Когда я выполняю тестовые случаи, я вижу сообщение SPEC, НЕ ИМЕЮЩЕГО ОЖИДАНИЯ для обоих тестовых случаев.Мне интересно, почему он показывает, что spec не имеет ожиданий.

Затем я следовал предложенным решениям в этом посте: Spec не имеет ожиданий - Жасмин тестирует функцию обратного вызова

Использованиеdone():

describe('#getAll', async () => {
    it('#should return user intergration_tester', inject([UsersService], async(service: UsersService, done) => {
        await service.getAll('integration_tester', access_token).subscribe(
            user => {
                expect(user[0].firstName).toContain('Integration');
                done();
            })
      }));

      it('#should return error 404', inject([UsersService], (service: UsersService, done) => {
        service.getAll('integration_tester', '').subscribe(
            user => {expect(user[0].firstName).not.toContain('Integration'); done();},
            err => { expect(err).toContain('error'); done();}
        )
      }));
})

И снова Жасмин говорит мне, что spec has no expectations

1 Ответ

0 голосов
/ 28 февраля 2019

Ожидание подписки ничего не делает ...

await service.getAll(...).subscribe(...)

Вам необходимо преобразовать наблюдаемое в Обещание.Кроме того, убедитесь, что ваша наблюдаемая завершена, в противном случае вам нужно получить только первый элемент, иначе обещание никогда не разрешится (скажем, getAll продолжает отправлять события или что-то в этом роде - но вы должны получить тайм-аут во время выполнения тестов).Это должно сделать трюк:

describe('#getAll', async () => {
    it('#should return user intergration_tester', inject([UsersService], async (service: UsersService) => {
        const user = await service.getAll('integration_tester', access_token).toPromise();
        expect(user[0].firstName).toContain('Integration');
    }));

    it('#should return error 404', inject([UsersService], async (service: UsersService) => {
        try {
            const user = await service.getAll('integration_tester', '').toPromise();

            expect(user[0].firstName).not.toContain('Integration');
        } catch (err) {
            // why do you also expect an error to be thrown?
            expect(err).toContain('error');
        }
    }));
})
...