【问题标题】:Laravel test POST routes with XMLLaravel 使用 XML 测试 POST 路由
【发布时间】:2019-11-15 12:47:03
【问题描述】:

我看过this question,但这不是我想要的。

我在一个接收 XML 的 Lumen 应用程序中有一个 API 端点。在控制器中,我通过以下方式读取数据:$request->getContent();

我正在尝试编写一个将 XML 发布到路由并检索响应的单元测试。我试过这个$response = $this->call('POST', '/api', $xml);,但是第三个参数必须是数组,而不是字符串。

如何在单元测试中将 XML 字符串发布到端点?

【问题讨论】:

  • 试试这个:$this->call('POST', '/api', ['data' => $xml]); 然后在你的控制器中而不是 $request->getContent() 使用 $request->data 来获取你的 XML。
  • 那行不通。我正在构建一个从公司接收数据的端点。我无法指定接收参数的方式。
  • 请解释你的xml结构,如果你想通过xml动态参数

标签: php laravel lumen


【解决方案1】:

The signature of the call is:

   /**
     * Call the given URI and return the Response.
     *
     * @param  string  $method
     * @param  string  $uri
     * @param  array  $parameters
     * @param  array  $cookies
     * @param  array  $files
     * @param  array  $server
     * @param  string|null  $content
     * @return \Illuminate\Foundation\Testing\TestResponse
     */
    public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)

因此,您可以将xml 作为最后一个参数传递:

$this->call('POST', '/api', [], [], [], [], $xml);

【讨论】:

  • 真的就是这么简单。感谢您的帮助。
【解决方案2】:

您可以尝试将 xml 字符串转换为数组,如 here on stackoverflow 所述,或者如果您只想通过调用 $request->getContent() 返回整个 xml,那么您可以使用 xml 字符串作为数组,如 $response = $this->call('POST', '/api', [$xml]);

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 2019-09-20
    • 2019-10-24
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2016-06-29
    相关资源
    最近更新 更多