質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

laravel5.6 phpunit実行時のsetRoundsについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 426

secon

score 3

 環境

  • 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

namespace Tests;

use Illuminate\Support\Facades\Hash;
use Illuminate\Contracts\Console\Kernel;

trait CreatesApplication
{
    /**
     * Creates the application.
     *
     * @return \Illuminate\Foundation\Application
     */
    public function createApplication()
    {
        $app = require __DIR__.'/../bootstrap/app.php';

        $app->make(Kernel::class)->bootstrap();

        Hash::setRounds(4);

        return $app;
    }
}

 本題

CreateApplication.php で呼び出そうとしている Hash::setRounds()が定義されていないというエラーですが、対応に悩んでいます。

質問は2点です。

  1. setRoundsをコメントアウトする対応で合っているのか
  2. 使用するHashクラスの切り替え

(1)
調べたところ、setRounds()は BcryptHasherクラスで定義されているメソッドです。ですが、デフォルトだと ArgonHasherクラスから呼び出してしまっているようです。

setRounds()をコメントアウトすればテスト自体は実行できますが、 ArgonHasherクラスではなく BcryptHasherクラスを使用するよう切り替えた方がよいのではないか、と感じています。どちらで対応すべきでしょうか?

(2)
質問(1)で切り替えが必要な場合はどこで切り替えをすればよいのでしょうか、という質問です。切り替えの必要がなくても構造の理解のために知っておきたいと考えています。

 補足

情報不足やわかりづらい部分などがありましたらご指摘ください。
また、片方のみの回答などでも非常に嬉しいです。

よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

(1) それはテストの目的によるのでなんともいえません。通常は本番と同じにした方がいいですが、setRounds()でデフォルトより小さな値を指定しようとしているので、まともにやると時間がかかりすぎる等であえてそうしたいとかでしょうか?

(2) 使用するドライバーはconfig/hash.phpで設定します。

    /*
    |--------------------------------------------------------------------------
    | Default Hash Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the default hash driver that will be used to hash
    | passwords for your application. By default, the bcrypt algorithm is
    | used; however, you remain free to modify this option if you wish.
    |
    | Supported: "bcrypt", "argon"
    |
    */

    'driver' => 'bcrypt',

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/31 14:00

    (1)
    CreatApplication.php のコードがデフォルトでこうなっていたので意図はわかりかねます、すみません・・・

    (2)
    config/hash.php の変更でphpunitが動作するようになりました。

    Hash Driver に argon を使用すると phpunit が使えなくなるのは疑問に感じますが、laravel 自体のコードを変更するより config ファイル群を設定した方が利用方法としては正しい気がするので(2)の対応をすることにしました。

    回答ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる