Как сделать тест TestCafe неудачным, когда angularjs выдает ошибку?

Когда angularjs выдает ошибку, он попадает в try/catch, а затем обработчик исключений регистрирует его как console.error. В результате testcafe не делает тест неудачным, когда это происходит, но мы бы хотели, чтобы этот тест считался неудачным. Мы попытались следовать предложению в этой теме и написали этот код:

fixture `Getting Started`
    .page `http://localhost:${port}/`;

const handleErrors = ClientFunction(() => {
    console.error = msg => {throw new Error(msg)};
});


test('Test', async t => {
    await handleErrors();
    //visit page with error, go somewhere else, return to page
    await t
        .expect(Selector('body').innerText).contains('hello world')

});

Контроллер вызывает $scope.undefined() поэтому он всегда выдаст ошибку в угловом коде, но тест все равно будет пройден. Мы ставим console.error = msg => {throw new Error(msg)}; прямо в нашем index.html, и увидел, что ошибка распечатана так: Uncaught Error: Error: Error: Error: TypeError: $scope.undefined is not a function,

Если мы добавим window.undefined(); прямо в наш index.html TestCafe считает это ошибкой и не проходит тест. Сообщение об ошибке выглядит так: Uncaught TypeError: window.undefined is not a function,

Кроме того, если мы положим console.error = msg => {throw new Error(msg)}; в файле index.html тест не пройден при возникновении ошибки angularjs. Так что похоже на handleErrors не работает должным образом или не рекламируется в этой теме.

Мы провели несколько подобных тестов и пришли к выводу, что угловое сохранение ссылается на consoleпоэтому, когда я переназначу его в этом handleErrors, это не влияет на консоль, которую использует angular. Как я могу сделать ошибки в угловом коде, не пройдя тесты testcafe?

Для чего это стоит, мы используем угловой 1.2.

1 ответ

Мы поместили это в наш тест, и это привело к ошибкам консоли:

fixture `Getting Started`
    .page `http://localhost:${port}/`
    .beforeEach(async t => await failOnJsErrors());

const failOnJsErrors = ClientFunction(() => {
    angular.element(document.body).injector().invoke(function($log) {
        $log.error = function(message) {
            throw new Error(message)
        };
    });
});

Там, вероятно, другое решение, если вы> angularjs 1.2

Другие вопросы по тегам