带有自定义函数的 Codeception 条件断言
Codeception Conditional Assertions with custom functions
所以我们让 Codeception 查看不同的数据库,同时在同一个 Cept 文件中测试另一个数据库
我需要帮助的是让函数 CanSeeInMasterDatabase
和 CantSeeInMasterDatabase
在测试完成后抛出错误。
换句话说,以 "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 tablename
是 debug
方法的输出。
fail
应该会产生预期的结果。
但我建议重写您的辅助方法以使用 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
方法,can
和 cant
方法会自动为所有 see
和 dontSee
方法生成。
所以我们让 Codeception 查看不同的数据库,同时在同一个 Cept 文件中测试另一个数据库
我需要帮助的是让函数 CanSeeInMasterDatabase
和 CantSeeInMasterDatabase
在测试完成后抛出错误。
换句话说,以 "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 tablename
是 debug
方法的输出。
fail
应该会产生预期的结果。
但我建议重写您的辅助方法以使用 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
方法,can
和 cant
方法会自动为所有 see
和 dontSee
方法生成。