\ Yii :: $ app-> request-> isAjax无法在功能测试中使用

时间:2018-02-08 22:38:56

标签: php ajax yii2 functional-testing codeception

我不知道我的功能测试方式是否错误 - 我只是从它开始。

我有一个控制器操作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)以避免冲突。

  

如何正确做到?

谢谢你。

0 个答案:

没有答案