具有自定义函数的Codeception条件断言


Codeception Conditional Assertions with custom functions

因此,我们让Codeception在测试同一Cept文件中的另一个数据库时查看不同的数据库

我需要帮助的是让函数CanSeeInMasterDatabaseCantSeeInMasterDatabase在测试完成后抛出错误
换句话说,以"canSee"answers"cantSee"等开头的已知Codeception函数允许测试在其中一个失败的情况下继续运行,一旦测试完成,它将为您提供最后失败的内容的一个小摘要。

在下面的函数中,我在测试过程中得到了正确的错误(见下文),但在测试结束时没有得到错误摘要

←[36m SELECT*FROM tablename WHERE columnname="1"AND field1="data"
←[39米
←[36m错误:在表名中找不到数据库值
←[3900万

我的测试结束时看起来像是,期望看到类似"有1个错误等"的

←[37;45m通过
←[39;49m
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

时间:28.09秒,内存:31.50Mb
←[30;42mOK(1次测试,0断言)←[0m

我们有一个自定义文件,有4个类似的功能

public function seeInMasterDatabase($tableName, $conditionArray) {
    $databaseReturn = $this->grabFromMasterDatabase($tableName, $conditionArray);
    if (empty($databaseReturn)) {
         $this->fail('Error: Database value could not be found in '  . $tableName);
    }
}
public function dontSeeInMasterDatabase($tableName, $conditionArray) {
    $databaseReturn = $this->grabFromMasterDatabase($tableName, $conditionArray);
    if (!empty($databaseReturn)) {
        $this->fail('Error: Database value could be found in '  . $tableName);
    }
}
public function canSeeInMaster($tableName, $conditionArray) {
    $databaseReturn = $this->grabFromMasterDatabase($tableName, $conditionArray);
    if (empty($databaseReturn)) {
        $this->debug('Error: Database value could be found in ' . $tableName);  
    }
}
public function cantSeeInMaster($tableName, $conditionArray) {
    $databaseReturn = $this->grabFromMasterDatabase($tableName, $conditionArray);
    if (!empty($databaseReturn)) {
        $this->debug('Error: Database value could be found in ' . $tableName);  
    }
}

为什么在一对方法中使用fail,在另一对方法使用debug

您还没有粘贴测试的代码,但看起来Error: Database value could be found in tablenamedebug方法的输出。fail应产生预期结果。

但我建议重写您的助手方法以使用assertEmptyassertNotEmpty:

public function seeInMasterDatabase($tableName, $conditionArray) {
    $databaseReturn = $this->grabFromMasterDatabase($tableName, $conditionArray);
    $this->assertNotEmpty($databaseReturn, 'Database value could not be found in '  . $tableName);
}
public function dontSeeInMasterDatabase($tableName, $conditionArray) {
    $databaseReturn = $this->grabFromMasterDatabase($tableName, $conditionArray);
    $this->assertEmpty($databaseReturn, 'Database value could be found in '  . $tableName);
}

通过这种方式,断言将被正确计数和报告。

编辑:不声明can方法,所有seedontSee方法都会自动生成cancant方法。