我正在使用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
答案 0 :(得分:0)
REST模块与框架模块兼容并依赖于处理请求。 但是,您发现了一个未报告的不兼容性 - grabAttributeFrom方法定义了两个模块 - Symfony2和REST。我会为此提出一个问题。
您可以使用一种解决方法 - 在REST模块的XML部分中定义了grabAttributeFrom,因此,如果您的REST请求仅返回JSON,则只能启用JSON功能。
REST:
depends: Symfony2
part: JSON