您可以在REST模塊解析之前修改HTTP響應內容。
REST模塊使用PhpBrowser
或某些Framefork模塊作爲HTTP客戶端。 因此,要刪除JSON保護字符串,您需要創建自己的模塊,該模塊將擴展PhpBrowser
並覆蓋_getResponseContent()
方法,然後在REST模塊配置中將此模塊用作依賴項。
假設我有REST方法http://example.dev/api/v1/test
與保護前綴
)]}'
{"test":"smest"}
/tests/api.suite.yml
class_name: ApiTester
modules:
enabled:
- REST:
depends: \Helper\MyPhpBrowser
url: 'http://example.dev/api/v1/'
- \Helper\Api
/測試/ _support /助手返回以下JSON字符串/MyPhpBrowser.php
<?php
namespace Helper;
class MyPhpBrowser extends \Codeception\Module\PhpBrowser
{
public function _getResponseContent()
{
$rawContent = (string)$this->client->getInternalResponse()->getContent();
// Here we're going to delete protection prefix from response content
$rawContent = preg_replace("/^\)\]\}'\n/", "", $rawContent);
return $rawContent;
}
}
/api/smestCept.php
<?php
$I = new ApiTester($scenario);
$I->sendGET('test');
$I->seeResponseContainsJson(['test' => 'smest']);
結果
$ codecept run api smestCept.php
Codeception PHP Testing Framework v2.2.4
Powered by PHPUnit 4.8.27 by Sebastian Bergmann and contributors.
Api Tests (1) -------------------------------------
✔ smestCept: (0.29s)
---------------------------------------------------
Time: 579 ms, Memory: 12.50MB
OK (1 test, 1 assertion)
您可以創建一個幫手都將修改結果,並斷言它,看到這個鏈接獲取更多信息HTTP: //codeception.com/07-12-2012/assertions-in-helpers.html –
這很有趣,但看起來這意味着我必須重新實現REST模塊中的每個與json相關的斷言,這可能不會太糟糕了,但我更喜歡 躲開它。我能夠擴展瀏覽器模塊,這看起來很有希望,但是有一個非常奇怪的繼承模型,使用反射並調用子類中的受保護方法導致訪問異常。 –