Тестирование исключений NGXS с жасмином - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь написать модульные тесты для действий, выполняемых нашим приложением Angular через ngxs. В одном из моих тестов я ожидаю, что действие выдаст ошибку. Я пытался использовать

expect(function() {store.dispatch(new MyAction(param));}).toThrowError();

но мне выдается сообщение «Ожидаемая функция для выдачи ошибки». хотя я вижу ошибку в моей консоли. После этой неудачи я попробовал следующее:

let errorMessage;
try {
    store.dispatch(new MyAction(param));
} catch (error) {
    console.log("In catch!");
    errorMessage = error;
}
expect(errorMessage).toBe(myErrorMessage);

Еще раз я вижу ошибку в моей консоли, но я не вижу "In catch!" console.log в моем предложении catch. После некоторых исследований я обнаружил, что у angular есть собственный ErrorHandler, который перехватывает эту ошибку, прежде чем jasmine сможет что-то с ней сделать. Как вы можете предотвратить это?

1 Ответ

1 голос
/ 09 июля 2019

Ответ: издевайтесь над угловым ErrorHandler, используя жасмин! Сначала создайте шпиона:

export const errorHandlerSpy = () => jasmine.createSpyObj('ErrorHandler', {
    handleError: undefined
});

используйте этого шпиона в качестве поставщика в ваших тестах:

beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [NgxsModule, /*other imports*/],
        providers: [
            { provide: ErrorHandler, useFactory: errorHandlerSpy }
        ]
    }).compileComponents();
}));

проверка на наличие брошенных ошибок:

const errorHandler = TestBed.get(ErrorHandler);
store.dispatch(new MyAction(param));
expect(errorHandler.handleError).toHaveBeenCalledWith(new Error('Your error message'));

Надеюсь, я избавил кого-то еще от головной боли в выяснении этого!

...