当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.2单元测试错误:BadMeodCallExc0019:调用未定义的方法照明\数据库\查询\Builder::()

干鑫鹏
2023-03-14

我正在尝试用Laravel 5.2设置PHPUnit。我按照留档进行了简单的单元测试,但是每个测试都会抛出相同的错误:

1) CreateAccountTest::testCreateUserWithInvalidEmail BadMethodCallException:调用未定义的方法Illumb\Database\Query\Builder::make()

/some/path/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2405 /some/path/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:1426 /some/path/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:3526 /some/path/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:504 /some/path/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:504 /some/path/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:73 /some/path/tests/UnitTests/CreateAccountT<--plhd##################################################################

我的单元测试看起来都与此类似,只是每次都声明不同的属性:

class CreateAccountTest extends TestCase
{

    protected $body;
    protected $app;

    protected function setUp() {
        parent::setUp();

        $this->app = factory(\App\Models\App::class)->create([
           'name' => 'Test Suite'
       ]);

        $this->body = [
            'name' => 'Doe',
            'firstName' => 'John',
            'login' => 'john.doe',
            'email' => 'john.doe@johndoe.com',
            'password' => 'test1324',
            'repeatPassword' => 'test1234',
            'appId' => $this->app->id
        ];
    }

    public function testCreateUserWithInvalidEmail() {
        $this->body['email'] = 'this_is_not_a_valid_email_address';

        $this->json('POST', '/profile/create', $this->body)
             ->assertResponseStatus(400);
    }

}

包含相关代码的配置文件控制器:

<?php

namespace App\Http\Controllers\Account;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Account\CreateAccountPostRequest;
use App\Models\AccessToken;
use App\Models\User;

class ProfileController extends Controller
{

    public function createUser(CreateAccountPostRequest $request) {

        $user = new User();
        $user->firstname = $request['firstName'];
        $user->name = $request['name'];
        $user->email = $request['email'];
        $user->password = $request['password'];
        $user->save();

        $accessToken = AccessToken::createAccessToken($user->id);
        $accessToken->save();

        return $this->sendSuccessResponse();
    }
}

模型工厂

$factory->define(App\Models\App::class, function (Faker\Generator $faker) {
    $company = $faker->company;
    return [
        'name' => $company,
        'submit_description' => $faker->sentence($nbWords = 6, $variableNbWords = true),
        'subdomain' => str_replace(' ', '', $company),
        'advancedFilter' => 0,
        'isdeleted' => 0,
        'defaultlanguage' => 'en',
        'timestamp' => time()
    ];
});

stacktrace所述的第32行如下:

 $this->json('POST', '/profile/create', $this->body)
             ->assertResponseStatus(400);

根据文件,这一切看起来非常简单,我不知道这里发生了什么。

共有1个答案

严阳成
2023-03-14

好吧,我知道这里发生了什么。我制作了一个字段受保护的$app意外覆盖父类中的$app字段。这将类从Laravel应用程序(illumb\Foundation\Application)转换为不存在make()函数的illumb/Database/Eloquent/Model。这就是抛出错误的原因。

所以基本上,将$app字段重命名为$Application或其他任何方法都可以解决问题。

 类似资料:
  • 我有点困惑,我调用了 我的中的方法如下所示: 我不知道我做错了什么但我现在有点迷茫

  • 我有一个模型如下: 和购物车表列为: 还有一个名为的透视表,用于将模型与模型关联起来。 假设我有一个特定的变量。现在,我想要一个带有用户id的购物车和他们的产品。为此,我写了这篇文章: 但在运行之后,我得到了以下错误: 我不想使用懒惰加载方法,因为n查询问题。 此外,每个用户在同一时间只能有一个购物车。

  • 我使用的是Laravel,当我尝试运行时,它会显示以下错误: 照明\数据库\查询异常: SQLSTATE[42000]:语法错误或访问冲突: 1071指定的密钥太长;最大密钥长度为767字节(SQL:更改表添加唯一()) 在 /Users/soksan/Desktop/TestLaravel/multiUsers/vendor/laravel/framework/src/Illuminate/Da

  • 晚安, 我正在对我的服务进行一些测试,在删除方法中执行测试时遇到了问题。 我想知道是否有人犯过这个错误,可以帮助我。 我扫描时出错。据报道,该方法没有使用。 例外情况: 代码:

  • 我不熟悉单元测试。参考google之后,我创建了一个测试类来测试我的控制器,如下所示: 我有以下控制器和服务类: 当我调试单元测试时,控制器中的p对象为null。我的状态是200,但不是预期的JSON响应 我错过了什么?

  • 我刚刚创建了php web服务器并将其连接到firebase。当我尝试身份验证时,注册工作正常。但问题在于登录。它不断出现以下错误: 致命错误:未捕获错误:调用未定义的方法Kreait\Firebase\Auth::在 /Applications/XAMPP/xamppfiles/htdocs/firebase_series/authActions.php:24Stack跟踪:#0{main}抛出