Транспортир: 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']
...