У меня есть сайт, написанный с помощью AngularJS, который я завернул в сквозных тестах с помощью Protractor. На этом сайте у меня есть несколько ссылок на репозитории GitHub для указанного веб-сайта. У меня есть несколько сквозных тестов, которые нажимают на эти ссылки и проверяют, что они вернут вас на правильную страницу. У меня также есть утверждения в конце каждого теста, который проверяет, что ошибки javascript не были брошены.API GitHub выдает ошибку, когда я не вызываю никаких вызовов API GitHub
Иногда, когда испытания бежать, я вижу следующее сообщение об ошибке в результатах тестов:
<failure type="toBe" message="Expected 'https://github.com/DnDGen/CharacterGen 0:0 Fetch API cannot load https://api.github.com/_private/browser/stats. ' to be ''."><![CDATA[Error: Failed expectation
at app.assertNoErrors (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\Tests\Integration\Views\commonTestFunctions.js:17:47)
at [object Object].promise.ControlFlow.runInFrame_ (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20)
at [object Object].promise.Callback_.goog.defineClass.notify (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2464:25)
at [object Object].promise.Promise.notify_ (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:563:12)
at Array.forEach (native)
at Object.goog.array.forEach (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43)
at [object Object].promise.Promise.notifyAll_ (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:552:16)
at goog.async.run.processWorkQueue (C:\Users\Cid the Coatrack\Documents\Programming\Projects\DNDGenSite\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21)
at runMicrotasksCallback (node.js:337:7)]]>
</failure>
Это особенно сбивает с толку, потому что я не делаю ни одного API вызовы на GitHub на всех - я просто разместить гиперссылки на страница для пользователя:
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a id="collapsedGithubLinks" href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a id="githubOrganizationLink" href="https://github.com/DnDGen">The DnDGen Project</a></li>
<li class="divider"></li>
<li><a id="githubDiceLink" href="https://github.com/DnDGen/RollGen">RollGen</a></li>
<li><a id="githubEquipmentLink" href="https://github.com/DnDGen/TreasureGen">TreasureGen</a></li>
<li><a id="githubCharacterLink" href="https://github.com/DnDGen/CharacterGen">CharacterGen</a></li>
<li><a id="githubEncounterLink" href="https://github.com/DnDGen/EncounterGen">EncounterGen</a></li>
<li><a id="githubDungeonLink" href="https://github.com/DnDGen/DungeonGen">DungeonGen</a></li>
<li><a id="githubSiteLink" href="https://github.com/DnDGen/DNDGenSite">This Site</a></li>
</ul>
</li>
<li class="padding-right"><a id="officialDndLink" href="http://dnd.wizards.com/">Official D&D Site</a></li>
</ul>
Что еще более странно, так это то, что тест, который терпит неудачу, несовместим. Иногда все тесты пройдут. В других случаях несколько тестов потерпят неудачу. И тесты, которые терпят неудачу, не связаны с этими ссылками - иногда тесты, утверждающие, что марка отображается на навигационной панели, без каких-либо ссылок или ссылок на ссылки вообще, не будут работать по той же причине API.
Я еще не видел эту ошибку на the live site. Я хочу знать, что вызывает это спорадически, и как я могу это исправить.
UPDATE:
Вот код, который я использую, чтобы утверждать, что нет никаких ошибок:
function assertNoErrors(browserLog) {
for (var i = 0; i < browserLog.length; i++)
expect(browserLog[i].message).toBe('');
expect(browserLog.length).toBe(0);
}
Это называется так:
afterEach(function() {
browser.manage().logs().get('browser').then(assertNoErrors);
});
Update 2:
Я также должен уточнить, что любой тест, который перемещается за пределы моего сайта (т. Е. Тесты, которые нажимают на ссылки GitHub), не проверяет наличие ошибок, потому что я не хотел, чтобы тесты терпели неудачу из-за ошибок на страницах, которые я не пишу и не контролирую , Те тесты, которые не проходят, остаются чисто внутренними для моего веб-приложения и почти никогда не взаимодействуют с ссылками github вообще.
Вот пример одного из испытаний, которое не случайно (не всегда это один и не делает это один не в состоянии все время)
it('shows the brand', function() {
expect(element(by.css('.navbar-brand')).isDisplayed()).toBeTruthy();
});
Для справки, это HTML для этого объект
<div class="navbar-header">
<a class="navbar-brand" href="~/">DnDGen</a>
</div>
Интересно, возможно ли, что ваш тестовый пакет достаточно быстро загружает достаточно страниц с одного IP-адреса, который может работать в каком-то ограничении скорости? Сами страницы могут использовать API. – jfriend00
Можете ли вы показать код, который используете, чтобы утверждать, что ошибок нет? –
Конечно.Я добавлю это как редактирование вопроса. – cidthecoatrack