В моем коде приложения есть много вызовов (например, 100+) к «верхнему объекту» со ссылкой на window.top, например, top.$("title")
и так далее. Теперь я столкнулся с проблемой использования Cypress для проведения сквозного тестирования. При попытке войти в приложение некоторые вызовы top.$(...)
, но DevTools показывает Uncaught TypeError: top.$ is not a function
. Это привело к тому, что моя команда и я обнаружили, что «вершиной», которую пытается достичь наше приложение, является сама среда Cypress.
Вещи, которые я пробовал , прежде чем прийти сюда:
1) Попытка заглушить window.top объектом window, ссылающимся на наше приложение. В результате нам сказали, что window.top является объектом только для чтения.
2) Исследование, если Cypress имеет какую-то конфигурацию, которая бы умно перенаправляла вызовы top в нашем коде, чтобы быть самой верхней средой в пределах наше приложение. Мы подумали, что, возможно, мы не единственные, кто сталкивался с этой проблемой.
Если бы были статьи, я бы не смог их найти, поэтому пришел спросить, есть ли способ сделать это, или кто-нибудь хотел бы знать альтернативное решение?
Другое решение, которое мы рассмотрели: Изучение объектов именования окон, чтобы мы могли ссылаться на них по имени вместо «окна» или «вершины». Если нет способа сделать то, что я пытаюсь сделать с помощью Cypress, я думаю, что мы готовы сделать это в крайнем случае, но, надеюсь, нам не нужно это менять, так как мы не точно знаю, сколько приложения оно сломает заранее.
@ Mikkel Не совсем уверен, какой код я могу предоставить, чтобы быть полезным, но вот код, который заставляет Cypress выдать необработанное исключение
if (sample_condition) {
top.$('title').text(...).find('content') // Our iframe
} else {
top.$('title').text(page_title)
}
И в нашем коде есть еще несколько экземпляров, где мы получаем доступ к верхнему объекту, но в целом они похожи. Мы выяснили, что root причина проблемы в том, что внутри Cypress вызовы «top» на самом деле взаимодействуют с Cypress вместо их предполагаемой среды, которая является нашим приложением.