Тестирование отслеживания событий в приложениях Angular
TLDR:
Я ищу
- Способ e2e (транспортир) тестирования запросов Http, сделанных в приложении Angular внешними сценариями, без насмешки, чтобы получить реальные значения, передаваемые в запрос http.
- Способ остановить выполнение страницы во вновь созданной вкладке / окне при тестировании событий e2e в приложении Angular
До сих пор я не мог найти способ сделать эти вещи, и я много искал... надеюсь, я не дублирую другие вопросы... но я думаю, что я прочитал почти все проблемы, которые могут быть связаны с тем, что я хочу сделать.. Извините за то, что не открыли две проблемы, но пока это все отслеживание связанных вещей и также может быть выпущено в одном вопросе;)
Итак, вот сценарий:
У меня есть приложение, в котором отслеживаются клики и просмотры. Они отслеживаются по принципу "нескольких ракурсов", когда мы, как создатели, провайдеры (равняемся клиенту, для которого мы делаем это), и издатели, которые внедряют приложение в каждый трек для себя.
Помимо этого "многоцелевого отслеживания" есть также различные способы отслеживания, которые можно назвать "многоцелевым отслеживанием".
- Пиксели слежения
- Отслеживание обратных вызовов
- URL перехода по клику
Отслеживание с помощью отслеживания пикселей
Не так много, чтобы сказать об этом. Каждый "угол" может обеспечить отслеживание пикселей, которые связаны с тегом img в представлении, когда запускаются четные изображения. Никаких проблем в тестировании, как на юните, так и на e2e
Отслеживание с функциями обратного вызова
Каждый "угол" может содержать такие скрипты, как google-analytics, которые выполняются при срабатывании событий. Модульное тестирование это не проблема. Когда дело доходит до тестирования e2e, я хочу сделать следующее:
- Заказать страницу
- View Tracker инициализируется
- ga.send выполнен
- проверьте HTTP запросы (ЭТО ТАМ, ГДЕ НАЧИНАЕТСЯ БОРЬБА)
- проверить, в порядке ли атрибуты в URL запроса
После многих исследований я не смог найти способ перечислить http-запрос, который был сделан приложением после загрузки и отслеживания представления. Есть много способов высмеивать запросы, но это не то, что мне нужно. Мне нужно сделать настоящий запрос и протестировать его.
URL перехода по клику
Каждый "угол" может предоставить URL перехода по клику, которые предшествуют конечной цели. При срабатывании клика, который перенаправляет из приложения, открывается новое окно / вкладка с этим URL. Как и в случае с обратным вызовом, модульное тестирование - это совсем не проблема. Но часть e2e мешает. Это то, что я хочу сделать.
- Заказать страницу
- Выполнить щелчок
- Переключиться на новую ручку окна
- Сделать браузер STOP выполнением
- Проверьте URL страницы
- Заставьте браузер продолжить
- Проверьте финальный URL
Это то, что я пытался до сих пор, но это не работает:
describe('CTR', function() {
beforeEach(function() {
el = element.all(by.repeater('result in ttip.event.result_set.result').row(0));
el.all(by.css('.hs-tooltip-bet-param')).click();
browser.ignoreSynchronization = true;
});
it('should contain ctr strings', function(done) {
browser.getAllWindowHandles().then(function(handles) {
var newWindowHandle = handles[1];
browser.switchTo().window(newWindowHandle).then(function() {
browser.driver.executeScript('window.stop()');
browser.driver.actions().sendKeys(protractor.Key.ENTER).perform();
// browser.sleep(1000);
expect(browser.driver.getCurrentUrl()).toContain(config.prefix);
expect(browser.driver.getCurrentUrl()).toContain('https://ad.doubleclick.net/ddm/');
expect(browser.driver.getCurrentUrl()).toContain('dc_lat');
expect(browser.driver.getCurrentUrl()).toContain('dc_rdid');
expect(browser.driver.getCurrentUrl()).toContain('dc_rdtag_for_child_directed_treatmentid');
}).then(function() {
browser.close();
}).then(function() {
browser.switchTo().window(handles[0]);
done();
});
});
});
});
Когда я запускаю этот тест на своей машине, я вижу изменение URL-адреса с Clickthrough на целевой URL. Но тест, похоже, выполняется, когда загружается конечная цель, что слишком поздно. Тесты возвращают конечную цель, а атрибуты, упомянутые в тесте, здесь больше не доступны.
Так что эти две вещи все еще не могут быть проверены для меня, но мне нужно проверить их любым способом, потому что крайне важно, чтобы эти вещи работали правильно. Вы можете сказать, что я не должен беспокоиться о том, что происходит за пределами приложения, но в моем случае издатели и провайдеры в основном бездарны. Я должен заверить их, что все работает так, как они изображают:D. Вы также можете сказать, что объединение такой большой логики отслеживания не имеет смысла, но это было не мое решение.
Извините за длинный пост и спасибо за помощь.
Мне удалось заставить тестирование по кликам работать с определенным URL клика. Похоже, что этот URL-адрес занимает гораздо больше времени, чтобы разрешить перенаправление, поэтому транспортир может захватить URL-адрес до того, как он изменится... Но должен быть способ контролировать это... в противном случае он просто основан на времени и удаче и действительно несовместим для этой цели.:/
1 ответ
Для тех, кто заинтересован: я пересмотрел свой подход и в итоге включил режим отладки, который отключает все исходящие URL-адреса и выводит их на консоль. Затем они могут быть проверены модульными и e2e тестами.
Столкнувшись со многими проблемами на страницах "перенаправления", на которые указывали URL-адреса кликов (издатели отключили URL-адреса кликов, учитывая, что URL-адреса были нарушены, кампании не были должным образом управляемы и т. Д.), Это был самый разумный способ проверить его.,
Тем не менее, если URL-адрес, который предоставляет издатель, не работает, мои приложения не перенаправляют должным образом. Но я решил, что хотя я хотел бы убедиться, что перенаправление работает должным образом, это не должно быть тем, о чем я должен ломать голову…