Laravel orderBy phpunit试验
我有一个phpunit测试,用于测试电影的排序,我需要测试我下面的查询是否返回并在线排序电影的状态,但我不确定我如何插入在线结果首先显示 质疑 试验 下面这个方法不起作用,但它是一个粗略的想法Laravel orderBy phpunit试验,laravel,phpunit,Laravel,Phpunit,我有一个phpunit测试,用于测试电影的排序,我需要测试我下面的查询是否返回并在线排序电影的状态,但我不确定我如何插入在线结果首先显示 质疑 试验 下面这个方法不起作用,但它是一个粗略的想法 /** * @test */ public function order_by_online_status() { $film = factory(Film::class)->create([ 'status' =&
/**
* @test
*/
public function order_by_online_status()
{
$film = factory(Film::class)->create([
'status' => FilmStatus::OFFLINE
]);
$film2 = factory(Film::class)->create([
'status' => FilmStatus::ONLINE
]);
$response = $this->json('GET', '/films');
$this->assertEquals(
$film, $film2);
}
如何断言首先列出的是online。我将断言请求的响应,由于这是一个请求,我还将断言响应状态代码。我会按以下方式做:
<?php
public function test_index_default_order_by_online_status()
{
$film1 = factory(Film::class)->create([
'status' => FilmStatus::OFFLINE
]);
$film2 = factory(Film::class)->create([
'status' => FilmStatus::ONLINE
]);
$this
->json('GET', '/films')
->assertOk() // assert the response have status code 200
->assertJson([ // assert the order
$film2, // film2 goes first since you ordered by created_at desc
$film1
]);
}
通过这样做,您可以确保更新的_at属性将不同
希望这有帮助。您可以尝试使用一些记录,如果您知道预期的结果,请创建一个json变量并将其与结果进行比较
$jsonFilms = "[{
"id": "0",
"film": "name",
"status": "Offline",
},
{
"id": "1",
"film": "name1",
"status": "Offline",
},
{
"id": "2",
"film": "name2",
"status": "Offline",
}]";
$this->assergEquals($response, $jsonFilms);
您可以选择第一个项目和资产相等,您能给我一个代码示例吗?
<?php
public function test_index_default_order_by_online_status()
{
$film1 = factory(Film::class)->create([
'status' => FilmStatus::OFFLINE
]);
$film2 = factory(Film::class)->create([
'status' => FilmStatus::ONLINE
]);
// parse the result
$result = $this->getExpectedResult([$film2, $film1]);
$this
->json('GET', '/films')
->assertOk() // assert the response
->assertJson($result);
}
private function getExpectedResult($data) {
return fractal($data, new FilmTransformer())->toArray();
}
<?php
public function test_index_default_order_by_online_status()
{
// set $film1 creation time
Carbon::setTestNow(Carbon::create(2019, 1, 1, 11, 0, 0));
$film1 = factory(Film::class)->create([
'status' => FilmStatus::OFFLINE
]);
// set $film2 creation time
Carbon::setTestNow(Carbon::create(2019, 1, 1, 11, 59, 59));
$film2 = factory(Film::class)->create([
'status' => FilmStatus::ONLINE
]);
// reset the time
Carbon::setTestNow();
$result = $this->getExpectedResult([$film2, $film1]);
$this
->json('GET', '/films')
->assertOk() // assert the response
->assertJson($result);
}
$jsonFilms = "[{
"id": "0",
"film": "name",
"status": "Offline",
},
{
"id": "1",
"film": "name1",
"status": "Offline",
},
{
"id": "2",
"film": "name2",
"status": "Offline",
}]";
$this->assergEquals($response, $jsonFilms);