如何在 Codeception 功能测试中使用 PHPUnit 断言方法?

Posted

技术标签:

【中文标题】如何在 Codeception 功能测试中使用 PHPUnit 断言方法?【英文标题】:How to use PHPUnit assert methods in a Codeception functional test? 【发布时间】:2014-02-21 06:00:47 【问题描述】:

我正在使用 Codeception 对我的 Laravel 4 php 应用程序进行单元、功能和验收测试。

我的单元测试如下所示:

use Codeception\Util\Stub;
class ExampleTest extends \Codeception\TestCase\Test 

 public function testExample()
 
  $example = true;
  $this->assertSame($example, true);
 

我的功能测试如下所示:

use \TestGuy;
class ExampleCest

 public function example(TestGuy $I)
  
  $I->amOnPage('/auth/login');
  $I->see('Sign in');
 

但我也想在我的功能测试中使用 PHPUnit 断言方法。但是当我尝试时,我得到了这个错误:

调用未定义的方法 ExampleCest::assertSame()

如何在 Codeception 功能测试中使用 PHP 断言方法?

【问题讨论】:

【参考方案1】:

在 Codeception 4 中只需添加断言模块:

modules:
    enabled:
        - \Codeception\Module\Asserts

到您的 suite.yml 配置文件并运行 codeception build

【讨论】:

别忘了“composer require --dev codeception/module-asserts”【参考方案2】:

由于 Codeception 2.1(不是 2.0),您可以像使用其他断言一样使用它:

$I->assertSame($expected, $actual, $message);

但不要忘记在您的配置中启用 Asserts 模块 - 例如:

class_name: UnitTester
modules:
    enabled: [ Asserts ]

请注意:升级到 2.1 时可能需要更改配置 - 请参阅升级说明:http://codeception.com/06-19-2015/codeception-2.1-rc.html

【讨论】:

对于“如何在功能测试中使用 Assert 方法”的问题,这是这里的最佳答案。 为了在 IDE 中查看其他方法,您必须在配置更改后运行一次测试套件。来自 codeception 文档:“默认情况下,Codeception 会在套件配置的每次更改时自动重建 Actions 特征。”【参考方案3】:

另一种解决方法是在测试套件中使用辅助方法。

例如assertSame()方法

class ExpectedHelper extends \Codeception\Module

    protected $test;

    function _before(\Codeception\TestCase $test) 
        $this->test = $test;
    

    function assertSame($expected, $actual, $message = '')
    
        $this->test->assertSame($exception, $actual, $message);
    

其中 ExpectedHelper 是测试套件 Helper 名称(例如:UnitHelperFunctionalHelper),应位于_support文件夹

你可以在你的测试中使用它$I->assertSame('12340','12340');

【讨论】:

【参考方案4】:

\PHPUnit_Framework_Assert::assertSame()

【讨论】:

以上是关于如何在 Codeception 功能测试中使用 PHPUnit 断言方法?的主要内容,如果未能解决你的问题,请参考以下文章

Yii2中如何使用CodeCeption

如何在 Codeception 命令行的验收测试中使用动态 url

如何在 Codeception 中使用 Stub::update?

如何使用 selenium 和 codeception 检测验收测试中的 dom 变化

如何从 codeception & phantomjs 测试中获取当前 url?

如何在 Codeception\Util\Stub 中正确使用 atLeastOnce 方法?