gpt4 book ai didi

php - 如何从 phpunit 中调度的 Action 中获取响应

转载 作者:搜寻专家 更新时间:2023-10-31 22:08:31 24 4
gpt4 key购买 nike

我正在将一些 POST 数据分派(dispatch)给 Controller 的操作。该操作回显了一些 json 编码的字符串。我想验证该操作的 json 编码字符串是否符合我的要求。我想知道如何获取该字符串?

我的测试是这样的:

$this->request->setMethod('POST')
->setPost(['test' => 'databaseschema_Database']);

$params = ['action' => 'analysis', 'controller' => 'Index', 'module' => 'default'];
$urlParams = $this->urlizeOptions($params);
$url = $this->url($urlParams);
$result = $this->dispatch($url);

$this->assertJsonStringEqualsJsonString(
$result, json_encode(["status" => "Success"])
);

我的测试失败了,我收到以下消息:

1) IndexControllerTest::testAnalysisAction
Expected value JSON decode error - Unknown error
stdClass Object (...) does not match expected type "NULL".

谁能指导我如何做到这一点?

最佳答案

如果你想做单元测试,你真正想做的是将 json 编码提取到它自己的类中(或 utils 类中的方法或其他东西),然后测试这些方法而不是你的整个 Controller 。

您的方法的问题在于,在运行 phpunit 时,没有 $_POST 数组。上面的代码没有显示正在发生的事情,但我猜想在通过 apache 和 cli 运行时会出现不同的行为,这会导致您的测试失败。

我会创建一个 TransformerClass 并单独测试它:

class JsonTransformer
{
public function transformPostData(array $postArray)
{
// transformation happening
}
}

class JsonTransformerTest extends \PHPUnit_Framework_TestCase
{
public function testTransformPostData()
{
$transformer = new JsonTransformer();
$data = array('action' => 'analysis', 'controller' => 'Index', 'module' => 'default');
$result = $transformer->transformPostData(data);

$this->assertJsonStringEqualsJsonString($result, json_encode(array("status" => "Success")));
}
}

如果您需要测试整个请求/响应,您可以使用某种 HTTPClient,请求 url,发送 post 数据并查看响应是否符合您的预期。

介于两者之间的所有事情(比如伪造发布数据)都会给您带来更多的问题和需要维护的代码,而不是它们给您带来的好处。

关于php - 如何从 phpunit 中调度的 Action 中获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com