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

Codeception Conditional Assertions with custom functions

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

我需要帮助的是让函数 CanSeeInMasterDatabaseCantSeeInMasterDatabase 在测试完成后抛出错误。
换句话说,以 "canSee" 和 "cantSee" 等开头的已知 Codeception 函数允许测试在其中一个失败的情况下保持 运行,一旦测试完成,它会给你一个最后失败的小总结。

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

←[36m SELECT * FROM tablename WHERE columnname= "1" AND field1= "data"
←[39m
←[36m Error: Database value could be found in tablename
←[39m

我测试的结尾是这样的,期待看到类似"there was 1 error etc etc etc"

的东西

←[37;45m PASSED
←[39;49m
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Time: 28.09 seconds, Memory: 31.50Mb
←[30;42mOK (1 test, 0 assertions) ←[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 方法,cancant 方法会自动为所有 seedontSee 方法生成。