Codeception:canSeeRecord()和seeRecord()之间有什么区别

时间:2018-05-20 20:24:03

标签: yii2 phpstorm codeception

我在Yii2应用程序中使用Codeception进行单元测试。 Yii2模块具有记录的seeRecord()方法。还有类似canSeeRecord()没有任何在线文档,但在PHPDoc中有其他信息:

  

条件断言:测试不会在失败时停止

但它究竟意味着什么?在测试失败时,PhpStorm仅显示第一个错误,因此我没有看到任何差异。这两个电话之间是否存在实际差异:

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

2 个答案:

答案 0 :(得分:2)

记录在https://codeception.com/docs/03-AcceptanceTests#Conditional-Assertions

  

通常,只要任何断言失败,就会进一步断言   测试将被跳过。有时你不想要这个 - 也许你有一个   长时间运行的测试,你希望它运行到最后。在这种情况下,你   可以使用条件断言。每个see方法都有一个对应的   canSee方法,dontSeecantSee方法:

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

每个失败的断言都会显示在测试结果中,但不会停止测试。

答案 1 :(得分:0)

事实证明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