Laravel orderBy phpunit试验

Laravel orderBy phpunit试验,laravel,phpunit,Laravel,Phpunit,我有一个phpunit测试,用于测试电影的排序,我需要测试我下面的查询是否返回并在线排序电影的状态,但我不确定我如何插入在线结果首先显示 质疑 试验 下面这个方法不起作用,但它是一个粗略的想法 /** * @test */ public function order_by_online_status() { $film = factory(Film::class)->create([ 'status' =&

我有一个phpunit测试,用于测试电影的排序,我需要测试我下面的查询是否返回并在线排序电影的状态,但我不确定我如何插入在线结果首先显示

质疑

试验 下面这个方法不起作用,但它是一个粗略的想法

    /**
     * @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);