2015-07-30 3 views
4

У меня есть сайт, написанный с помощью 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> 
+0

Интересно, возможно ли, что ваш тестовый пакет достаточно быстро загружает достаточно страниц с одного IP-адреса, который может работать в каком-то ограничении скорости? Сами страницы могут использовать API. – jfriend00

+0

Можете ли вы показать код, который используете, чтобы утверждать, что ошибок нет? –

+0

Конечно.Я добавлю это как редактирование вопроса. – cidthecoatrack

ответ

0

Это немного догадка, но если вы нажав на ссылки и навигации по GitHub, и ваш собственный код не делает вызов https://api.github.com/_private/browser/stats, эти ошибки, вероятно, от страницы GitHub и не ваш собственный.

У меня нет элегантного решения для фильтрации этих снимков с моей головы, к сожалению. Вы не можете утверждать, что на консоли нет ошибок в тестах, которые взаимодействуют с сайтами сторонних разработчиков.

+0

На самом деле я НЕ проверяю ошибки на любом тесте, который перемещается на страницу за пределами моего сайта - в частности, если у них есть ошибки, которые я не могу контролировать. Но хорошая мысль, да. – cidthecoatrack

+0

Интересно, поэтому вы не проверяете ошибки в тестах, которые нажимают на ссылки, но вы все равно получаете свои проверки проверки ошибок? –

+0

Правильно. Различные тесты - тесты, которые не взаимодействуют со ссылками или с сайтами GitHub - сбой из-за ошибки API GitHub. На самом деле это действительно озадачивает. – cidthecoatrack