代码之家  ›  专栏  ›  技术社区  ›  kapperkp

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

  •  -1
  • kapperkp  · 技术社区  · 10 年前

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

    我需要帮助的是获取功能 CanSeeInMasterDatabase CantSeeInMasterDatabase 测试完成后抛出错误。
    换句话说,以“canSee”和“cantSee”等开头的已知Codeception函数允许测试在其中一个失败的情况下继续运行,一旦测试完成,它将向您简要介绍最后失败的内容。

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

    [36m SELECT*FROM tablename WHERE columnname=“1”AND field1=“data”
    [390万
    [36m错误:在表名中找不到数据库值
    [390万

    我的测试结束时看起来像是,希望看到类似“有1个错误等”的内容

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

    时间: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);  
        }
    }
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   Naktibalda    10 年前

    你为什么使用 fail 在一对方法和 debug 在另一个?

    您还没有粘贴测试的代码,但看起来像 Error: Database value could be found in tablename 是的输出 调试 方法 这个 失败 应产生预期结果。

    但我建议您重写助手方法以使用 assertEmpty , assertNotEmpty :

    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 方法, 可以 cant 自动为所有 see dontSee 方法。