現在、私はLaravelの関数をテストする際にいくつかの問題を抱えています。この関数は単純なユーザー保存関数です。Laravelユニットテスト優しい挿入
現在の構造は、ユーザー
class User extends Authenticatable
を伴うその後、私はUserControllerで
class UserController extends Controller
{
protected $user;
public function __construct(User $user)
{
$this->user = $user;
$this->middleware('admins');
}
セーブ機能がUserControllerでクラスに定義されている、このクラスでは唯一のリクエスト変数を割り当て、雄弁なセーブを使用していますデータベースに保存する関数。
関数シグネチャは以下の通り:
public function storeUser($request)
{
$this->user->name = $request->name;
$this->user->email = $request->email;
$this->user->country_id = $request->country_id;
return $this->user->save();
}
NewAccountRequestオブジェクトは要求から延びており、要求の検証ルールを有します。
class NewAccountRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:user',
'password' => 'required|min:6|max:60',
];
}
}
私の問題は、このstoreUser関数をユニットテストする方法です。
私は現在のテストがあります。
public function testSaveUserWithEmptyRequest()
{
$user = $this->createMock(User::class);
$controller = new UserController($user);
$request = $this->createMock(NewAccountRequest::class);
$store = $controller->storeUser($request);
$this->assertFalse($store);
}
私はユーザーとNewAccountRequestの両方をからかってるし、問題が雄弁から救う、アサーションが偽でなければならないことです。代わりに私はNullを得ています。どのように私は正しく機能をテストすることができますか?
内部 'saveUser'機能である何、あなたがreturn文が欠落しています? –
@ ShadyAtef質問をStoreUserコードで更新し、呼び出し名を修正しました。 –
私は 'User :: class'を模倣しました。PHPUnitでは、' createMock'は、オブジェクトのすべての関数を何も持たず、nullを返すダミーのものに置き換えます。 実際にlaravelでデータベース操作をテストするには、DatabaseMigrations'または 'DatabaseTransactions'で提供されている2つの特性の1つを使用する必要があります。 –