環境
- MacOS HighSierra 10.13.6
- laravel 5.6
- php 7.2.4
- phpunit 7.4.3
前提
laravel5.6で開発を行なっています。
テストを実行しようとlaravelのドキュメントを参考にしてテストを作成し、phpunit コマンドを実行したところ下記のエラーが発生します。
$ phpunit PHPUnit 7.4.3 by Sebastian Bergmann and contributors. EE 2 / 2 (100%) Time: 340 ms, Memory: 12.00MB There were 2 errors: 1) Tests\Feature\ExampleTest::testBasicTest Error: Call to undefined method Illuminate\Hashing\ArgonHasher::setRounds() /var/www/vendor/laravel/framework/src/Illuminate/Support/Manager.php:146 /var/www/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:223 /var/www/tests/CreatesApplication.php:21 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:91 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:68
php
1<?php 2 3namespace Tests; 4 5use Illuminate\Support\Facades\Hash; 6use Illuminate\Contracts\Console\Kernel; 7 8trait CreatesApplication 9{ 10 /** 11 * Creates the application. 12 * 13 * @return \Illuminate\Foundation\Application 14 */ 15 public function createApplication() 16 { 17 $app = require __DIR__.'/../bootstrap/app.php'; 18 19 $app->make(Kernel::class)->bootstrap(); 20 21 Hash::setRounds(4); 22 23 return $app; 24 } 25}
本題
CreateApplication.php で呼び出そうとしている Hash::setRounds()が定義されていないというエラーですが、対応に悩んでいます。
質問は2点です。
- setRoundsをコメントアウトする対応で合っているのか
- 使用するHashクラスの切り替え
(1)
調べたところ、setRounds()は BcryptHasherクラスで定義されているメソッドです。ですが、デフォルトだと ArgonHasherクラスから呼び出してしまっているようです。
setRounds()をコメントアウトすればテスト自体は実行できますが、 ArgonHasherクラスではなく BcryptHasherクラスを使用するよう切り替えた方がよいのではないか、と感じています。どちらで対応すべきでしょうか?
(2)
質問(1)で切り替えが必要な場合はどこで切り替えをすればよいのでしょうか、という質問です。切り替えの必要がなくても構造の理解のために知っておきたいと考えています。
補足
情報不足やわかりづらい部分などがありましたらご指摘ください。
また、片方のみの回答などでも非常に嬉しいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/31 05:00