2017-01-17 13 views
1

オーケー、だから私は、私はLaravel 5と互換性があるようにLaravel 4との良好な取引を使用したパッケージを更新しようとしています、元のリポジトリはしばらくの間更新されておらず、Laravel 5で動作するには少々微調整が必​​要だったからです。Laravelパッケージユニットは、設定ファイルのヘルパー関数のために、故障テスト(未定義のメソッドBASE_PATHに呼び出し())

私は必要な変更を行い、元のリポジトリにpull requestを作成しました。

でも、私はユニットテストが失敗していた気づいたので、私はそれに掘ってみました。これまでPHPUnitで何もしていないので、これは良い学習経験となると思いました。

私はgithubの上で表示されるエラーと助けを求めていませんよ。私はそのエラーを回避することができましたが、いくつかのテストを削除することでこれを達成しました。実際の解決策ではないので、これらの変更はコミットされません。単体テストの仕組みをよりよく理解したら、それを修正します。

Laravelのヘルパー機能の1つがパッケージのデフォルト設定ファイルで使用されているという問題があると、base_path()は定義されていません。

私は理解しているように、PHPUnitのはクラスで動作し、私はそれを使用するために機能をモックする必要があります。どのようにそれを行うには、まっすぐ答えを見つけるように見えることはできません。

それは私のリポジトリの階層に存在しないフォルダに設定変数を指していますので、私はそれが返すべきかさえわかりません。

問題を引き起こしているファイルは、デフォルトの設定は、ポリグロット/設定/ polyglot.phpに位置しています

return [ 

// Whether to swap out the facades (Router, Lang, etc) with 
// Polyglot's, disable this if you need other packages to do the same 
// Can specify an array of facades to swap, eg. ['Lang', 'URL'] 
'facades' => true, 

// Locales 
//////////////////////////////////////////////////////////////////// 

// The default locale if none is provided in the URL 
// Leave empty to force the use of locales prefixes in URLs 
'default' => 'en', 

// The fallback locale for translations 
// If null, the default locale is used 
'fallback' => null, 

// The available locales 
'locales' => [], 

// Gettext 
//////////////////////////////////////////////////////////////////// 

// The domain of your translations, for gettext use 
'domain' => 'messages', 

// Where the PO/MO files reside 

'folder' => base_path('resources/lang'), 
// Format of the compiled files 
'file' => '{domain}.po', 

// Database 
//////////////////////////////////////////////////////////////////// 

// The pattern Polyglot should follow to find the Lang classes 
// Examples are "Lang\{model}", "{model}Lang", where {model} 
// will be replaced by the model's name 
'model_pattern' => '{model}Lang', 

]。

このような状況ではどのようなことが一般的ですか?関数を手動で定義しますか?何とかヘルパーファイルを含める?または、関数の使用を破棄し、基本的なphpディレクトリ参照を使用して解決策を参照してください。どんな助けもありがとう。

+0

コードを投稿できますか? 'base_path'を呼び出すコード、爆発するPHPUnitテスト、PHPUnitの設定など。 – bishop

+0

これにより、27件のテストがすべて失敗しています。私はあなたが構成によって何を意味するか分からないが、バージョンは4.8です。私はもともとテストを書いていませんでしたが、ちょっとした手がかりを持っています。あなたは全体のパッケージをここで見つけることができますhttps://github.com/Anahkiasen/polyglot(ブランチを開発する)私はまた、元の質問のプルリクエストにリンクしています。 –

+1

['base_path'](https://laravel.com/docs/5.3/helpers#method-base-path)は標準のLaravelヘルパーです。 Laravelが起動するたびに利用可能です。適切なことは、あなたのテストで(Laravelに付属の 'TestCase'を使って)Laravelを起動することです。あまり適切ではない(これは単に 'function base_path(){return __DIR__;}かそのようなものかもしれません)。最低限、PHPファイル参照と文字列アセンブリを使用して構築するのが適切です。 – bishop

答えて

0

base_pathは標準Laravelヘルパーです。 Laravelが起動するたびに利用可能です。適切なアプローチは、Laravelに含まれるTestCase基本クラスを使用して、テストでLaravelを起動することです。公式testing guidethis laracastを参照してください。

メソッドをモックしないでください。ファイル参照と文字列アセンブリで置き換えるべきではありません。これらのいずれかを実行すると、コードがLaravel統合からまで移動します。L5アップグレードでは、そうではありません。

関連する問題