2017-02-28 67 views
0

我正在嘗試使用處理請求的客戶端庫來測試我自己的Rest-API。 我寫了一個助手,其中客戶端被初始化並添加了一個名爲「wantToGetUserOverClient($ userId)」的操作。客戶端執行請求並返回JSON,當我使用var_export()JSON時,該JSON按預期工作。 我試圖延長休息模塊,並直接分配公開回應場卻得到一個例外:如何在不使用PhpBrower的情況下從代碼中的REST客戶端保存JSON響應

[ModuleException] PhpBrowser: Page not loaded. Use `$I->amOnPage` (or hidden API methods `_request` and `_loadPage`) to open it 

我的問題: 什麼是保存在Codeception REST模塊響應客戶端的響應的最好方式,使我可以使用現有的JSON操作。 例如:

$I->wantToGetUserOverClient(1234); 
$I->canSeeResponseIsJson(); 

而不加載頁面枝條的PhpBrower。

在此先感謝。

我的助手:

class ApiHelper extends \Codeception\Module\REST 
{ 
    private $backendApi; 

    public function __construct(ModuleContainer $moduleContainer, $config = null) 
    { 
     parent::__construct($moduleContainer, $config); 
     $this->backendApi = new BackendRestAPI(); 
    } 

    public function wantToGetUserOverClient($userId) 
    { 
     $this->response = $this->backendApi->user()->one($userId); 
    } 
} 

回答

1

您在不當使用REST模塊。
但是,如果你堅持,你必須用你的模塊替換PhpBrowser。
配置:

REST: 
    depends: YourModule 

爲了seeResponseIsJson工作,YourModule必須擴展Codeception\Lib\InnerBrowser和實施_getResponseContentmethod

+0

感謝您的答案和解決方案。它的工作原理和我可以建立一個工作解決方案。 最後一件事,我知道我在濫用REST模塊。 我應該通過PHPBrowser發出請求,以便所有事情都像預期的那樣工作,但是如果您必須測試客戶端,那麼「最佳實踐」又是什麼? 客戶端和Web服務的單獨測試? – CodingNinja

+0

是的,你應該真正分開客戶端和web服務的測試。 – Naktibalda

相關問題