Ищу предложения о том, как точно определить фактический источник недействительного / неожиданного токена.
Я запускаю тесты с кипарисом, и большую часть времени (хотя и не всегда) я получаю этоошибка из всех моих тестов.
Uncaught SyntaxError: Invalid or unexpected token
This error originated from your application code, not from Cypress.
When Cypress detects uncaught errors originating from your application it will automatically fail the current test.
This behavior is configurable, and you can choose to turn this off by listening to the 'uncaught:exception' event.
https://on.cypress.io/uncaught-exception-from-application
Итак, давайте будем ясны;Я понимаю, что это проблема моего кода приложения, а не моего тестового кода.Моя проблема в том, что мне еще предстоит увидеть что-либо, указывающее на фактическое местоположение синтаксической ошибки .Кроме того, я запускаю приложение в chrome 72 (не через Cypress), и у меня нет проблем .Кажется, проблема возникает только тогда, когда я запускаю приложение через Cypress ( также использую Chrome 72 , потому что я использую --browser chrome
, когда я запускаю спецификации Cypress).
У меня естьдобавили обработчики fail
и uncaught:exception
в мои тесты, чтобы перехватить выходные данные, хотя я все еще не могу найти ничего, чтобы направить меня туда, где истинный источник ошибки.
, взломав uncaught:exception
обработчик, передано два аргумента, 1) ошибка (такая же, как указано выше);2) mocha (я думаю) работоспособный:
Hook {title: ""before all" hook", fn: ƒ, body: "function () {↵ var _this = this;↵↵ debugger;… cy.visit("/#/account-management");↵ });↵ }", async: 0, sync: true, …}
$events: {error: Array(1)}
async: 0
body: "function () {↵ var _this = this;↵↵ debugger;↵ cy.on('fail', event_handler_functions_1.failHandler.bind(this));↵ cy.on('uncaught:exception', function (e, r) {↵ console.log(e, r);↵ debugger;↵ });↵ cy.fixture(Cypress.env("environmentSettings")).then(function (fixture) {↵ _this.environmentData = environmentData = fixture;↵ cy.launchApp(environmentData.baseUrl, environmentData.username, environmentData.password↵ /*, 300000*/↵ );↵ cy.visit("/#/account-management");↵ });↵ }"
callback: ƒ done(err)
ctx: Context {currentTest: Test, _runnable: Hook, test: Hook, environmentData: {…}}
fn: ƒ ()
hookId: "h1"
hookName: "before all"
id: "r3"
parent: Suite {title: "Account Management", ctx: Context, suites: Array(0), tests: Array(3), pending: false, …}
pending: false
sync: true
timedOut: false
timer: null
title: ""before all" hook"
type: "hook"
_currentRetry: 0
_enableTimeouts: false
_retries: -1
_slow: 75
_timeout: 4000
_trace: Error: done() called multiple times at Hook.Runnable (https://localhost:44399/__cypress/runner/cypress_runner.js:30161:17) at new Hook (https://localhost:44399/__cypress/runner/cypress_runner.js:26593:12) at Suite.beforeAll (https://localhost:44399/__cypress/runner/cypress_runner.js:31573:14) at before (https://localhost:44399/__cypress/runner/cypress_runner.js:26770:17) at context.describe.context.context (https://localhost:44399/__cypress/runner/cypress_runner.js:26666:10)
__proto__: Runnable
Я прошел через before()
в своем тесте, с включенной "Паузой при исключениях" в отладчике Chrome.Никаких ошибок, пока я не пройду все шаги в before()
и не должен будет "Возобновить выполнение скрипта".Обратите внимание, у меня нет теста beforeAll()
в моем тесте, просто before()
.
. Я не вносил последние изменения, которые используют необычный синтаксис (насколько я могу судить), иЯ не запускал набор тестов в своей локальной среде в течение нескольких недель, поэтому есть много изменений - слишком много, чтобы я чувствовал, что стоит разбирать их один за другим.
воттест из этого экземпляра ошибки для справки, хотя все они имеют одну и ту же проблему.
import { failHandler } from "..\\..\\support\\event-handler-functions"
describe('Account Management', function () {
var environmentData: CypressTypings.EnvrionmentSettings;
before(function () {
debugger;
cy.on('fail', failHandler.bind(this))
cy.on('uncaught:exception', (e, r) => {console.log(e, r); debugger;})
cy.fixture(Cypress.env("environmentSettings")).then((fixture) => {
(<any>this).environmentData = environmentData = fixture
cy.launchApp(environmentData.baseUrl, environmentData.username, environmentData.password/*, 300000*/);
cy.visit("/#/account-management");
});
})
beforeEach(() => {
Cypress.Cookies.preserveOnce(environmentData.cookieName)
})
it('Loads Governments', function () {
cy.get("[data-cy=government-panel]", { timeout: 20000 }).should("have.length.gte", 1);
})
it('Users Page Loads', function () {
cy.get("[data-cy=government-panel]").first().find(".fa-users").click();
cy.get("tbody", { timeout: 20000 }).find("tr").should("have.have.length.greaterThan", 0);
cy.get("[data-cy=return-to-organization-button]").click();
cy.get("[data-cy=government-panel]").should("exist");
})
it('Service Area Page Loads', function () {
cy.get("[data-cy=government-panel]").first().find(".fa-globe").click();
cy.get("tbody", { timeout: 20000 }).find("tr").should("have.have.length.greaterThan", 0);
cy.get("[data-cy=return-to-organization-button]").click();
cy.get("[data-cy=government-panel]").should("exist");
})
})
Также стоит отметить: на самом деле происходит шаг launchApp()
- приложение входит в систему, а затем появляетсякогда приложение загружается, возникает синтаксическая ошибка и шаг visit()
фактически никогда не выполняется.