如何跳过 Codeception cest 测试

Posted

技术标签:

【中文标题】如何跳过 Codeception cest 测试【英文标题】:How to skip a Codeception cest test 【发布时间】:2015-05-13 06:09:13 【问题描述】:

我只想跳过一个 codeception cest 测试中的一个测试。

使用 Cept 测试,您可以进行 $scenario->skip();,但不适用于 Cest 测试。

所以我想做这样的事情。运行第一个测试,但跳过第二个。

Class MyTests

   public funtion test1()
    // My test steps
     

   public function test2()
     $scenario->skip("Work in progress");
     

提前谢谢你。

【问题讨论】:

【参考方案1】:

您要查找的方法称为“不完整”。

$scenario->incomplete('your message, why skipping');

如果你想在 Cest 文件中使用 Scenarios,你可以通过你的测试方法的第二个参数来获取它:

class yourCest 

    public function yourTest(WebGuy $I, $scenario) 
    
        $scenario->incomplete('your message');
    

或者你可以使用$scenario->skip('your message')

class yourCest 

    public function yourTest(WebGuy $I, $scenario) 
    
        $scenario->skip('your message');
    

编辑:

如前所述,WebGuy 已过时,注释 @skip@incomplete 是您应该跳过 Cest 文件中的测试的方式。

class yourCest 


    /**
     * @skip Skip message
     */
    public function yourTest(AcceptanceTester $I) 
    
        $I->shouldTestSomething();
    

【讨论】:

请注意,您将$scenario 作为参数传递给您的测试方法。我在第一次阅读时错过了这个:( 我刚刚尝试了incompleteskip,但没有任何反应。没有错误,没有消息,运行套件时测试被标记为“OK”。有什么想法吗? 这个答案应该被删除。 Webguy 已折旧。【参考方案2】:

首先,请记住,您可以使用哪些命令取决于您加载了哪些模块和套件。例如,如果您正在使用默认启用 WordPress 的 YML 进行集成测试:

$scenario->skip('your message');

不适用于开箱即用的 Cest 或测试,但可以在 Acceptance 中使用。

事实上,这个命令通常会与 Cept 测试一起使用 [Cepts 通常是 Acceptance like tests,Cests 和 Tests 通常是 phpUnit like OOP tests]。此外,您需要将 $scenario 传递给您的函数。这没有明确记录,我无法让它在 Cests 中工作。不要让我开始说选择“$scenario”作为 BDD 框架的关键字有多糟糕! “场景”是 Gherkin 中的一个关键字,指的是 Codeception 中的“步骤对象”。在 Codeception 中,它似乎被用作“环境”的一种冗余形式,即使已经存在环境、套件和组。像大多数这个伟大的框架一样,文档和函数名称需要由以英语为母语的人重做,这是第二次! [还记得“网络人”吗?该死的性别歧视欧洲人!大声笑]。

如果你使用

/**
 * @skip
 */
public function myTest()
  //this test is totally ignored

Cest 或 Test 中函数正上方的注释将被跳过,甚至不会出现在报告中。 [真的跳过它]。如果您想完全隐藏测试,请使用此选项。

如果直接使用 PHPUnit 命令:

public function myTest()
  throw new \PHPUnit_Framework_SkippedTestError('This test is skipped');
  //this test will appear as a yellow “skipped” test in the report

这将在报告中生成一个跳过的测试,在 html 报告中变为黄色 [--html]。如果您想跳过测试但在报告中注意到它已被跳过,请使用此选项。

【讨论】:

【参考方案3】:

使用 PHPUnit_Framework_SkippedTestError。例如:

    if (!extension_loaded('mongo')) 
        throw new \PHPUnit_Framework_SkippedTestError(
            'Warning: mongo extension is not loaded'
        );
    

【讨论】:

【参考方案4】:

我使用skip 注释进行单元测试。

/**
 * @skip
 */
public function MyTest(UnitTester $I)

    ...

【讨论】:

【参考方案5】:

所以要在测试运行期间跳过您的场景:

    您必须将 $scenario 作为测试中的第二个输入参数 拨打电话:$scenario->skip(); 跳过后拨打电话:$I->comment("跳过场景的原因")

【讨论】:

以上是关于如何跳过 Codeception cest 测试的主要内容,如果未能解决你的问题,请参考以下文章

Codeception 在 CEST 内的所有测试之前运行

Codeception Cest 嘲弄

Yii2中如何使用CodeCeption

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

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

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