phpunit getContent返回空

时间:2017-03-21 21:43:18

标签: laravel-5 phpunit

我正在学习Laravel 5.4,还是Laravel和PHPUnit的新手。在完成在线基础教程后,一切都很顺利。

运行phpunit时,此测试功能正常运行

public function testBasicExample()
{
    $response = $this->call( 'GET' , '/welcome');

    $this->assertTrue(strpos($response->getContent(), 'Laravel') !== false);

}

当我尝试测试Api

时出现问题

我采取的步骤

  1. 为图书创建Api路线

  2. 从localhost / api / books /

  3. 返回来自用户talbe的所有用户json
    public function index()
    {
      $users = DB::table('users')->get()->toJson();
      echo $users;
    }
    
    1. 我在浏览器中打开链接并正确返回json

    2. 将json复制并粘贴到在线json验证器jsonlint中,它是有效的。

    3. 创建新的测试功能

    4. public function test_index_method_returns_all_books()
      {
          $response = $this->call( 'GET' , '/api/books/');
            $this->assertEquals(200, $response->getStatusCode()); 
      
          $data = json_decode($response->getContent(),true);
          $this->assertJson($data);
      }
      
      1. 运行phpunit 200状态测试通过,但assertJson没有通过。

      2. 我尝试为$ response-> getContent()做var_dump,发现它返回空。

      3. 现在我无法获得api / book /的getContent()。有谁知道这是否有解决方案?

        感谢。

        Here is a screenshot

1 个答案:

答案 0 :(得分:0)

在调用api之前,尝试使用工厂创建一些数据:

例如:

factory(\App\Books::class, 20)->create();

然后

$response = $this->call( 'GET' , '/api/books/');

如果您在phpunit.xml上将“:memory:”设置为数据库,则将不再从本地数据库中看到任何数据,这就是为什么应该使用工厂的原因。