我正在学习Laravel 5.4,还是Laravel和PHPUnit的新手。在完成在线基础教程后,一切都很顺利。
运行phpunit时,此测试功能正常运行
public function testBasicExample()
{
$response = $this->call( 'GET' , '/welcome');
$this->assertTrue(strpos($response->getContent(), 'Laravel') !== false);
}
当我尝试测试Api
时出现问题我采取的步骤
为图书创建Api路线
从localhost / api / books /
public function index() { $users = DB::table('users')->get()->toJson(); echo $users; }
我在浏览器中打开链接并正确返回json
将json复制并粘贴到在线json验证器jsonlint中,它是有效的。
创建新的测试功能
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); }
运行phpunit 200状态测试通过,但assertJson没有通过。
我尝试为$ response-> getContent()做var_dump,发现它返回空。
现在我无法获得api / book /的getContent()。有谁知道这是否有解决方案?
感谢。
答案 0 :(得分:0)
在调用api之前,尝试使用工厂创建一些数据:
例如:
factory(\App\Books::class, 20)->create();
然后
$response = $this->call( 'GET' , '/api/books/');
如果您在phpunit.xml上将“:memory:”设置为数据库,则将不再从本地数据库中看到任何数据,这就是为什么应该使用工厂的原因。