簡體   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