Как сделать тест 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