Транспортир: Polyfill Function.prototype.bind в PhantomJS. Не может заставить это работать, это вообще возможно?

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

Я использую Angular с Headroom для обработки меню, исчезающего при прокрутке вниз. Мое тестирование сделано с помощью Protractor, с использованием PhantomJS, и вот тут начинается самое интересное.

PhantomJS не поддерживает .bind() и Headroom использует его повсеместно, а это значит, что мне нужно его заполнить. Это не должно быть проблемой, но я не могу заставить это работать.

Я думаю, что моя проблема в том, что независимо от того, где я запускаю функцию polyfill, PhantomJS и проверенная страница уже загружены, так что уже слишком поздно, Headroom не сможет загрузиться из-за .bind() не доступны

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

2 ответа

Вы не можете запускать сценарии до фактической загрузки страницы, поскольку они являются частью дерева dom. Что вы можете сделать:

window.onload = function() {
//do something
}; 

но даже когда происходит событие onload, тег должен быть обработан. Поэтому вы должны попробовать свою идею и добавить один тег script перед всеми другими элементами в html и запустить там код, если это только для тестового запуска. `

`

Я думаю, у меня есть обходной путь для этого. (по крайней мере, сделайте это, и мы посмотрим, работает ли он или нет) Лучшее, что вы можете сделать, - это исправить ваш браузер phantomJS для поддержки этого метода. По сути, вы должны запускать скрипт перед каждой спецификацией, чтобы он мог применяться к глобальной области видимости и был доступен для ваших спецификаций.

Просто попробуйте расширить ваши спецификации. Вот пример:

...
specs: ['my_phantomjs_bind_patch.js', 'webtests/**/*.js']
...
Другие вопросы по тегам