繁体   English   中英

Laravel 5.1使用JSON对API进行PHPUnit测试

[英]Laravel 5.1 PHPUnit Tests for API using JSON

我刚刚开始在Laravel 5.1中使用单元测试来测试要构建的API,并且可以使PHPUnit与ExampleTest.php一起正常工作,但是当我创建自己的测试时,每次都会失败。

这是我的API端点v1/conversations的响应:

{
  "data": [
    {
      "id": 1,
      "created_at": "2015-07-05",
      "updated_at": "2015-07-07"
    },
    {
      "id": 2,
      "created_at": "2015-07-06",
      "updated_at": "2015-07-08"
    }
  ]
}

这是我的ConversationsTest.php:

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ConversationsTest extends TestCase
{

    public function test_list_conversations()
    {
        $this->get('v1/conversations')->seeJson('data');
    }
}

但是当我必须运行测试时,我得到以下信息:

There was 1 error:

1) ConversationsTest::test_list_conversations
ErrorException: Argument 1 passed to Illuminate\Foundation\Testing\TestCase::seeJson() must be of the type array, string given

我的API是否不返回有效的JSON数据? 为什么Laravel的seeJson方法不能解释响应? 我试图遵循Laravel 5.1 Testing APIs文档 ,但显然缺少某些内容...

端点返回的数据很好,不应修改。 错误只是告诉您正在将字符串传递到函数seeJson('data');

根据这里https://github.com/laracasts/Integrated/wiki/Testing-APIs的说明 ,您应该能够像这样使用它,以便验证是否已返回某些JSON ...

$this->get('v1/conversations')->seeJson();

您还可以将数组传递给此函数,以查看数据的特定部分是否存在...

$this->get('v1/conversations')->seeJson([
    'data' => 'some data',
]);

尽管除非传入整个数组(端点也将返回该数组),否则这很可能会失败。

您唯一不能做的就是将字符串传递给此函数,因为它不知道如何处理字符串。

尝试这个

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ConversationsTest extends TestCase
{

    public function test_list_conversations()
    {
        $this->get('v1/conversations')->seeJson(['data']);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM