Прогнать весь массив значений, на наличие ошибок в цикле

Всем привет.
grabMultiple - собираю массив значений и в цикле их проверяю на наличие ошибок, тест останавливается при первом failed, как прогнать весь полученный массив, для получения всего списка ошибок, а не только первой - try…catch может какие?

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

1 лайк

В цикле у меня
$I->seeResponseCodeIs(200);
проходит по сгенереномым страницам Sitemap

хотел получить сразу весь список ошибок. а не по одной отправлять

у Rest особо и нет не явных проверок
или …

Странно, первый вопрос был связан grabMultiple который относится к WebDriver и PhpBrowser, тут вдруг вырастает откуда-то REST у которого нет grabMultiple. А если по поводу REST, то там есть доступ к такой переменной, как response, в ней содержится результат последнего запроса, вот его и ковыряй.

Сорри что запутал, вопрос не был связан с grabMultiple он там только учавствовал, PhpBrowser & REST связка,

Я хочу понять как сделать так чтобы тест прошел все 100 значений из массива и показал на какой из страниц ошибка, а не выдал ошибку на 4-ом и остановился

      $I->amOnPage('/sitemap/');
      $aLinkShow = $I->grabMultiple(".class", 'href');

      foreach($aLinkShow as $key => $value)
      {
        $I->amOnPage($value);
        $I->seeResponseCodeIs(200);
      }
    

Если хочешь красивый отчет то можно через try … catch:

  $I->amOnPage('/sitemap/');
  $aLinkShow = $I->grabMultiple(".class", 'href');
  $errors = null;
  foreach($aLinkShow as $key => $value)
  {
    $I->amOnPage($value);
    try {
      $I->seeResponseCodeIs(200);
    } catch (Exception $e) {
      $errors[] = "URL '$value' dont work!!!";
    }
  }
  $I->assertNull($errors, print_r($errors, true));
2 лайка

Кууул, смотрел в сторону Assert и try…catch крутил но все не то и не там ))
Thank!

Может заменить команды see* на canSee* - тогда даже при фэйле проверки, он проверит все остальные результаты.

Да, но используется Rest module,
через webdriver очень нама долго

Но ведь у REST модуля тоже есть команды canSee*

Можно поподробней, - я такого не видел
http://codeception.com/docs/modules/REST

На сайте codeception’a про это очень мало написано http://codeception.com/docs-2.0/04-AcceptanceTests#Conditional-Assertions , но можешь поискать эти методы у себя в сегенерых:
/tests/_support/_generated/{suiteName}TesterActions.php

По идее, в phpstrom’e у тебя должны подсасываться эти команды, когда ты начнёшь их вводить

canSee* и все методы кроме grab* и get* ничего не возвращают, это чистые Assert, так что они не подходят т.к. проверять нечего!!!

В смысле нечего? Грабить ссылки всё той же коммандой нужно, я говорю про команду, которой проверять респонс код.

  $I->amOnPage('/sitemap/');
  $aLinkShow = $I->grabMultiple(".class", 'href');

  foreach($aLinkShow as $key => $value)
  {
    $I->amOnPage($value);
    $I->canSeeResponseCodeIs(200);
  }

Хорошо, а каков будет итоговый результат теста??? Фейл или ОК ?

Если хотябы 1 canSee зафейлит - то и результат у самого теста будет фейл. Я же скидывал ссылку, где можно почитать про эти команды http://codeception.com/docs-2.0/04-AcceptanceTests#Conditional-Assertions

Таки работает.
Спасибо