如何在Laravel中编写用于用户配置文件更新的TDD代码

时间:2019-09-17 01:25:07

标签: laravel laravel-5.8

在应用程序中使用我的功能之前,我想先创建一个TDD。

我已经创建了更新功能,更新工作正常,但是在此之前我要运行一个测试用例。所以我创建了这个测试用例。

/** @test */
public function updateUser()
{

    $this->withExceptionHandling(); 

    //creating a user
    $user = factory(User::class)->create();

    //passing updating values
    $response = $this->put('users/update_profile', [
        'name' => 'name123',
        'phoneno' => 9842345562,
        'address' => 'newwwww'
    ]);

    $this->assertEquals('name123', User::first()->name);
    $this->assertEquals(9842345562, User::first()->phoneno);
    $this->assertEquals('newwwww', User::first()->address);

}

//update function
public function update(UpdateProfileRequest $request)
{
    $user = auth()->user();

    $user->update([
        'name' => $request->name,
        'phoneno' => $request->phoneno,
        'address' => $request->address
    ]);

    session()->flash('success', 'User Proifile Updated');

    return redirect(route('users.view-profile'));
}

无法断言两个字符串相等。 ---预期 +++实际 @@ @@ -'name123' +“ Tad Predovic”

仅收到此错误。

1 个答案:

答案 0 :(得分:0)

您不应该依赖User::first(),因为您的第一条记录可能不是您刚刚创建的。而是在设置新值之后刷新您已经必须从数据库中获取更新值的模型。您可以在声明前使用$user-refresh()

/** @test */

公共函数updateUser() {

$this->withExceptionHandling(); 

//creating a user
$user = factory(User::class)->create();

//signing in as the new user
$this->actingAs($user);

//passing updating values
$response = $this->put('users/update_profile', [
    'name' => 'name123',
    'phoneno' => 9842345562,
    'address' => 'newwwww'
]);

//Get new values
$user->refresh();

$this->assertEquals('name123', $user->name);
$this->assertEquals(9842345562, $user->phoneno);
$this->assertEquals('newwwww', $user->address);

}