Laravel:在 API 测试中使用 Eloquent 模型

Posted

技术标签:

【中文标题】Laravel:在 API 测试中使用 Eloquent 模型【英文标题】:Laravel : Use Eloquent Model in API Testing 【发布时间】:2015-02-15 18:05:33 【问题描述】:

我想用真实的数据库插入和查询来测试api,所以我尝试使用setUpBeforeClasstearDownAfterClass方法进行前后测试。

<?php

use App\Models\User;

class UserTest extends TestCase 

public static function setUpBeforeClass()

    User::create([ 'name' => 'Tom' ]);


public function testStore()

    $this->call('POST', 'users', [
        'name' => 'Tim'
    ]);

    $this->assertResponseOk();


public static function tearDownAfterClass()

    $users = User::where('name', '=', 'Tom')
               ->orWhere('name', '=', 'Tim')->get();

    $users->each(function($user) 

        $user->delete();
    );



但是,什么时候会得到Eloquent not found。

Fatal error: Class 'Eloquent' not found in /Applications/MAMP/htdocs/edu-api/apis/app/models/User.php on line 6

<?php namespace App\Models;

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

use Eloquent;

class User extends Eloquent 

我在命名空间或环境方面是否有任何错误,甚至我不应该这样做?

【问题讨论】:

作为替代方案 - 您可以考虑使用 Jeffrey Way 的这个包在测试期间播种 DB。效果非常好:github.com/laracasts/TestDummy 【参考方案1】:

EloquentModel 类的别名,所以你需要这个:

use Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent 

或者只是扩展模型而不使用内联别名

use Illuminate\Database\Eloquent\Model;

class User extends Model 

【讨论】:

以上是关于Laravel:在 API 测试中使用 Eloquent 模型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用phpunit在具有动态URI的laravel中测试REST api

Laravel 5.1 使用 JSON 的 API 的 PHPUnit 测试

如何使用 API 中间件在 Laravel 中测试 PHPUnit 一个经过身份验证的用户?

Laravel 测试 api Post MethodNotAllowedHttpException

Laravel 尝试对 API JSON 响应进行单元测试

laravel phpunit 测试与 api 令牌认证