这是我想要运行的单元测试。这总是失败的。我尝试了错误的数据。尽管如此,它还是失败了,而有了正确的数据,它仍然失败了。请有人帮我摆脱困境。
如果有人想探索更多:http://github.com/PawanRoy1997/forum.git
Php单元测试:
<?php
namespace TestsFeature;
use AppModelsUser;
use IlluminateFoundationTestingRefreshDatabase;
use IlluminateSupportFacadesAuth;
use TestsTestCase;
class UserTest extends TestCase
{
use RefreshDatabase;
/** @@test */
public function login()
{
$data = ['name'=>'some', 'email'=>'some@some.com','password'=>'password'];
User::create($data);
$this->assertTrue(Auth::attempt($data));
}
}
输出:
➜ forum git:(master) ✗ asn test
FAIL TestsUnitUserTest
⨯
FAIL TestsFeatureUserTest
⨯ login
---
• TestsUnitUserTest >
Error
Call to a member function connection() on null
at vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1571
1567▕ * @return IlluminateDatabaseConnection
1568▕ */
1569▕ public static function resolveConnection($connection = null)
1570▕ {
➜ 1571▕ return static::$resolver->connection($connection);
1572▕ }
1573▕
1574▕ /**
1575▕ * Get the connection resolver instance.
+7 vendor frames
8 tests/Unit/UserTest.php:19
IlluminateDatabaseEloquentModel::__callStatic()
• TestsFeatureUserTest > login
Failed asserting that false is true.
at tests/Feature/UserTest.php:19
15▕ public function login()
16▕ {
17▕ $data = ['name'=>'some', 'email'=>'some@some.com','password'=>'password'];
18▕ User::create($data);
➜ 19▕ $this->assertTrue(Auth::attempt($data));
20▕ }
21▕ }
22▕
Tests: 2 failed
Time: 0.31s
➜ forum git:(master) ✗
实际上,我刚刚发现在创建用户时需要对密码进行散列。我忘了提我已经更新了Laravel,然后这一切就开始了。在laravel 8.51中,Auth::try只检查散列密码。但在laravel 8.50及之前版本中,它允许密码不被散列。
<?php
namespace TestsFeature;
use AppModelsUser;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use TestsTestCase;
class UserTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/
public function test_example()
{
$data = [
'name' => 'someone',
'email' => 'some@some.com',
'password' => Hash::make('password'),
'confirm_password' => 'password'
];
User::create($data);
$this->assertDatabaseCount('users', 1);
$this->assertTrue(Auth::attempt(['email' => 'some@some.com', 'password' => 'password']));
}
}