一些Codeception模块是否不兼容?

时间:2015-12-02 19:41:51

标签: php json symfony testing codeception

我正在使用Codeception为Symfony项目进行验收测试。我需要测试所有内容,这意味着测试页面(html内容)以及它们执行的ajax调用(JSON内容)。

我已经在我的套件设置中启用了Symfony2模块,但我发现它中没有几种方法来检查JSON字符串,所以我想我也应该启用REST模块。但是,如果我这样做,其他先前存在的测试将失败。

例如,这个简单的测试:

public function privateExtranetHome(AcceptanceTester $I)
{
    $I->wantTo('test something');
    $I->amOnRoute('acme_site_home.es');
    $I->assertEquals(
        'container',
        $I->grabAttributeFrom('#container-slider', 'class')
    );
}

这不是JSON测试测试,只是我Cest类中已经存在的测试,当我只启用了Symfony2模块时通过,现在我添加了REST模块失败了。错误消息是:

Scenario:
* I am on route "acme_site_home.es"

  [Page] http://localhost/es
  [User] anon. []
* I grab attribute from "#container-slider","class"

Fatal error: Call to a member function hasAttribute() on null in [...]\Codeception\Module\REST.php on line 993

也许amOnRoute()方法与REST模块不兼容,因为当后者启用时,我得到一个空响应。但是我的问题是:是否有一些文档,某些文件说明哪些模块不兼容,不应该一起启用?或者我应该根据经验为每个模块使用单独的套件?

以防万一,我的验收套件设置如下:

class_name: AcceptanceTester
modules:
    enabled:
        - Asserts
        - Db
        - Symfony2
        - Doctrine2
        - \Tests\Helper\Acceptance

我的Codeception设置:

namespace: Tests
actor: Tester
paths:
    tests: tests
    log: tests/_output
    data: tests/_data
    support: tests/_support
    envs: tests/_envs
settings:
    bootstrap: _bootstrap.php
    colors: true
    memory_limit: 1024M
extensions:
    enabled: [ Codeception\Extension\RunFailed ]
modules:
    config:
        Db:
            dsn: 'mysql:host=localhost;dbname=acme_test'
            user: 'root'
            password: 'blahblah'
            dump: 'tests/_data/dump.sql'
            populate: false
            cleanup: false
        Doctrine2:
            depends: Symfony2
            cleanup: false
        PhpBrowser:
            url: http://acme.com
        WebDriver:
             browser: firefox
             url: http://acme.com
        REST:
            depends: Symfony2
            url: http://acme.com

1 个答案:

答案 0 :(得分:0)

REST模块与框架模块兼容并依赖于处理请求。 但是,您发现了一个未报告的不兼容性 - grabAttributeFrom方法定义了两个模块 - Symfony2和REST。我会为此提出一个问题。

您可以使用一种解决方法 - 在REST模块的XML部分中定义了grabAttributeFrom,因此,如果您的REST请求仅返回JSON,则只能启用JSON功能。

REST:
    depends: Symfony2
    part: JSON