【发布时间】:2021-07-12 23:38:05
【问题描述】:
我正在尝试编写测试,但我无法通过假测试用户进行身份验证,我正在使用 mongodb、jenssegers/laravel-mongodb 和 jwt-auth
这是我创建的工厂
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use Faker\Generator as Faker;
use Illuminate\Support\Str;
$factory->define(\App\User::class, function (Faker $faker) {
return [
'username' => $faker->name(),
'password' => $faker->password()
];
});
phpunit.xml 文件
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="mongodb"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php>
这是测试
p
ublic function test_if_can_customer(){
$this->withoutExceptionHandling();
$user = User::factory()->make();
$url = '/customer/12345646';
$response = $this->actingAs($user,'api')
->json('GET', $url);
$response
->assertStatus(200)
->assertJson([
'meta'=>[
'success'=>true
]
]);
}
我得到这个错误:
1) Tests\Feature\LeadTest::test_if_can_get_customer
MongoDB\Driver\Exception\AuthenticationException: Authentication failed.
更新:
如果我使用 sqlite 而不是 mongodb
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php>
我收到此错误:
TypeError: Argument 1 passed to Jenssegers\Mongodb\Query\Builder::__construct() must be an instance of Jenssegers\Mongodb\Connection, instance of Illuminate\Database\SQLiteConnection given, called in /home/myuser/myproject/vendor/jenssegers/mongodb/src/Jenssegers/Mongodb/Eloquent/Model.php on line 415
【问题讨论】:
-
对于基因检测,您应该使用 SQLite 连接。如果您想实际与 Mongo 驱动程序交互,您可以创建一个单独的数据库并在 phpunit.xml 中指定它
-
您的测试从未运行,因为与数据库的连接失败。 (MongoDB 需要用户名和密码,但您没有在 phpunit.xml 中指定)。我同意上面的评论,你应该在你的 phpunit.xml 中使用 SQLite 而不是 mongoDB 进行测试,那么你不需要用户名/密码。
标签: php laravel phpunit laravel-6 jenssegers-mongodb