我不知道我的功能测试方式是否错误 - 我只是从它开始。
我有一个控制器操作update-ajax
,并且有一个像这样的支票
public function actionUpdateAjax($id)
{
//...
$doc = $this->findDocument($id);
if (\Yii::$app->request->isAjax && $form->load($post) {
$form->doSomething;
$form->save();
return $this->asJson(['success' => 1]);
}
//...
}
我有一个WorkflowCest
功能测试用例,如下所示:
public function testUpdateAjaxValidUser(FunctionalTester $I)
{
$user = $I->grabFixture('user', 'user1');
$I->amLoggedInAs($user);
$doc = $I->grabFixture('docs', 'doc1');
$I->sendAjaxPostRequest(['update-ajax', 'id' => $doc->id], ['Document[title]' => 'myNewTitle']);
$I->canSeeRecord(Document::class, ['id' => $doc->id, 'title' => 'myNewTitle']);
}
当我删除isAjax
条件时,此测试通过。但我暂时无法删除此测试...
在调试输出中,没有显示标题。 isAjax
函数检查标题X-Requested-With: XMLHttpRequest
。我读到函数$I->haveHttpHeader
仅适用于验收测试。真的吗?我是否至少需要PhpBrowser?
所以我不能将此测试作为(更快)功能测试吗? 在那种情况下,如果某个动作正在侦听特定标题,我是否无法进行功能测试?
编辑:
我也尝试启用PhpBrowser,但是sems我配置错了。这是我的functional.suite.yml
class_name: FunctionalTester
modules:
enabled:
- Yii2
- PhpBrowser:
url: 'http://localhost'
这是我在前端的codeception.yml:
namespace: frontend\tests
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
helpers: tests/_support
settings:
bootstrap: _bootstrap.php
colors: true
memory_limit: 1024M
modules:
config:
Yii2:
transaction: false
configFile: 'config/test-local.php'
coverage:
enabled: true
include:
- components/*
- controllers/*
- models/*
- modules/*
然后出现以下错误:
[Codeception \异常\ ModuleConflictException]
Yii2模块与PhpBrowser冲突当您使用相同的操作启用两个模块时,通常会发生这种情况 但有不同的后端。例如,你无法运行 PhpBrowser,WebDriver,Laravel5模块在一个套件中,
因为他们实现类似的方法,但使用不同的驱动程序来执 他们。您可以加载模块的一部分(例如: ORM)以避免冲突。
如何正确做到?
谢谢你。