Не удается найти источник: `uncaught syntaxerror` (встречается только в кипарисе) - PullRequest
0 голосов
/ 22 февраля 2019

Ищу предложения о том, как точно определить фактический источник недействительного / неожиданного токена.

Я запускаю тесты с кипарисом, и большую часть времени (хотя и не всегда) я получаю этоошибка из всех моих тестов.

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() фактически никогда не выполняется.

1 Ответ

0 голосов
/ 01 марта 2019

Я урезал наши npm-пакеты , подозревая, что, возможно, добавленный пакет мог ввести SyntaxError.Я удалил около 1/4 наших пакетов npm (которые в любом случае были запоздалыми) и очистил наши зависимости.После всего этого Uncaught SyntaxError ушел.


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

Пакеты, которые я прекратил удалять (некоторые из которых мы, вероятно, недавно обновили):

@types/plotly.js
aurelia-animator-css
@types/jest
@types/node
@types/pikaday
ajv
d3
jest
jest-cli
jquery-sparkline
nps-utils
opn
protractor
ts-jest
ts-node
uglify-js
vinyl-fs
wait-on
...