Codeception: в чем разница между canSeeRecord () и seeRecord () - PullRequest
0 голосов
/ 20 мая 2018

Я использую Codeception для модульных тестов в приложении Yii2.Модуль Yii2 имеет документированный метод seeRecord () .Существует также аналогичный canSeeRecord() без какой-либо онлайн-документации, но с дополнительной информацией в PHPDoc:

Условное утверждение: тест не будет остановлен при ошибке

Но чтоэто на самом деле означает?При неудачном тесте PhpStorm показывает только первую ошибку, поэтому я не вижу никакой разницы.Есть ли практическая разница между этими двумя вызовами:

$this->tester->seeRecord(MyModel::class, ['name' => 'rob006']);
$this->tester->canSeeRecord(MyModel::class, ['name' => 'rob006']);

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Оказывается, что PHPDoc был прав - тест будет продолжен после неудачного утверждения.Но в моем случае меня смутила интеграция PhpStorm, которая сообщает только о первой ошибке.

Я создал простой тест:

public function testTest() {
    // products table is empty - these tests always fail
    $this->tester->canSeeRecord(Product::class, ['id' => 1]);
    $this->tester->canSeeRecord(Product::class, ['id' => 2]);
    $this->tester->canSeeRecord(Product::class, ['id' => 3]);
}

PhpStorm показывает только первую ошибку в этом тесте:

enter image description here

Но когда вы запускаете эти тесты из консоли, сообщаются все три ошибки:

enter image description here

0 голосов
/ 21 мая 2018

Документально подтверждено на https://codeception.com/docs/03-AcceptanceTests#Conditional-Assertions

Обычно, когда любое утверждение не выполняется, дальнейшие утверждения этого теста пропускаются.Иногда вы этого не хотите - возможно, у вас есть длительный тест, и вы хотите, чтобы он работал до конца.В этом случае вы можете использовать условные утверждения.Каждый метод see имеет соответствующий метод canSee, а dontSee имеет метод cantSee:

$I->canSeeInCurrentUrl('/user/miles');
$I->canSeeCheckboxIsChecked('#agree');
$I->cantSeeInField('user[name]', 'Miles');

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

...