問題タブ [phpspec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - phpspec を使用した API ラッパーのテスト
TDD と phpspec を使用して API クラスのラッパーを作成しようとしています。
Client
REST API からのデータの要求/取得を処理するクラスを作成しました。このクラスは、いくつかのEntity
クラスの 1 つにマップされるため、ORM のように動作します。
TDDでアプリケーションをテストして拡張するようになったので、少し行き詰まっています。これはClient
エンティティ クラスの依存関係であるため (独自の子オブジェクトを要求できるようにするため)、これをモックするのに苦労しています。
たとえば、エンティティの 1 つ は次のComic.php
ようになります。
簡潔にするために、 の単純化されたダウン バージョンはClient.php
次のようになります。
ComicSpec.php
では、例として、it_gets_all_characters()
ルックのテストはどのように行われるのでしょうか?
これが理にかなっており、必要に応じてさらに情報を提供できることを願っています。
ご覧いただきありがとうございます。
php - Phpspec テスト クラス コンストラクター
Laravel プロジェクトで Phpspec を使い始めたところです。
私がテストしているクラスには、次のスキーマがあります。
非常に単純化されているため、実際のコードは含めません。パラメータが無効な場合は例外がスローされますが、これをコードで更新したい場合はお知らせください。そして、仕様クラスは次のとおりです。
無効な引数に対して例外がスローされていることを確認できましたが、コンストラクトの検証に合格し、有効な場合は値を返すことを確認したいと考えています。
私はドキュメントを読みましたが、これを達成する方法を見つけることができませんでした.BDDを完全に理解していないと思います.
この種のテストは単体テストなので、動作テストとは別にする必要がありますか?
php - Windows CMD から phpspec を実行すると、プロジェクト ルートではなく vendor/bin に spec および src フォルダーが作成されます。
最近、phpspec と gulp について学んでいて、それらをワークフローに統合することにしました。composer 経由で phpspec をインストールすると、次のファイル構造が得られます。
- ベンダー
- 置き場
- phpspec
- 置き場
より多くのファイルがありますが、フォルダがありますが、これらは関連しています。
私のCMDでは、現在プロジェクトのルートを指して実行しようとしています:
ただし、エラーが表示'vendor' isn't recognizes as internal or external command...
されるので、bin フォルダーに移動してcd vendor/bin
から実行するphpspec
と、実際に機能します。ただし、クラスを記述しようとするとphpspec describe SeatsHandler
、ルートディレクトリではなくファイルが作成され、vendor/bin
フォルダー内に作成されます。
- ベンダー
- 置き場
- phpspec
- スペック
- ソース
- 置き場
私はそれをどのように設定して読むことができるかを見ようとしましたphpspec.yml
. メインフォルダーにディレクトリとともにそのようなファイルを作成しましたapp
(アプリディレクトリを取り除きたいです):
このファイルをメイン ディレクトリに配置しようとしましたが、うまくいきませんでした。以前と同じ結果が得られました。このファイルも移動しようとしましvendor/bin
たが、役に立ちませんでした。
phpspec にファイルをルート ディレクトリ内ではなくルート ディレクトリに作成させるにはどうすればよいvendor/bin
ですか? また、なぜ無視するのphpspec.yml
ですか?
編集:
phpspec.yml
myを次のように変更することで、なんとか機能させることができました。
そして入れvendor/bin
ます。vendor/bin
ただし、 CMD でディレクトリ内に移動せずに phpspec を実行するにはどうすればよいですか?
laravel-4 - phpspec 入力ファイルを開けませんでした
composer を使用して Laravel プロジェクトに phpspec をインストールしましたが、実行しようとすると次のphpspec
エラーが発生します。
からエイリアスなしで実行しようとすると同じですvendor/bin/phpspec
私は何が欠けていますか?
php - PHPSpec スタブでメソッドを 1 つだけモックする
さて、パッケージの 1 つを PHPSpec テストに移行しようとしていますが、すぐにこの問題に遭遇しました。パッケージは shoppingcart パッケージなので、カートに 2 つのアイテムを追加すると、カートのカウントが 2 になることを簡単にテストしたいと思います。しかしもちろん、ショッピングカートに同じアイテムを 2 つ追加すると、カートに新しいエントリはありませんが、元のアイテムの「数量」は 2 になります。異なるサイズ。そのため、各アイテムは、その ID とオプションに基づいて、一意の rowId によって識別されます。
これは、rowId (add()
メソッドによって使用される)を生成するコードです。
今、私は次のようにテストを書きました:
しかし問題は、メソッドに対して両方のスタブが返さnull
れることgetId()
です。だから私はwillReturn()
そのメソッドの設定を試みたので、私のテストは次のようになりました:
しかし、今ではエラーが発生し、予期しないメソッドが のように呼び出されていることがわかりますgetName()
。したがって、呼び出される CartItem インターフェイスのすべてのメソッドに対して同じことを行う必要があります。
これで動作します。テストは緑色です。しかし、それは間違っているように感じます...何か不足していますか、それともPHPSpecの制限ですか?
php - PHPSpec と Laravel
Eloquent メソッドにアクセスしたり使用したりできない場合、PHPSpec を使用する意味は何ですか?
例: ($this は EloquentProduct
モデルを参照します)
これはメソッド内では機能せず、さまざまな Eloquent CollectionaddProperty
およびModel 関数への呼び出しがあります。これらすべてのクラスがステートメントremoveProperty
に含まれている場合でも、PHPSpec はこれを処理できないようです。use
Laracasts の Jeffery Way のスクリーン キャストで、彼が実際の Eloquent モデルを使用していないことに気付きました。彼はバニラの PHP オブジェクトのみを使用します。それのポイントは何ですか?それは現実の世界ではありません。
また、私はすでにこれを行っているため、雄弁なモデルクラスを正しく参照することとは関係ありませんuse Illuminate\Database\Eloquent\Model;
また、私はファサードを決して使用しません。だから、そうでもありません。
php - PHPSpec 使用時のクラス インターフェイスの使用方法
PHPSpec でテストする場合、実際の具体的なクラスではなく、メソッドに注入されたクラス インターフェイスを使用するにはどうすればよいですか?
たとえば、メソッドに aProduct
を注入するクラスがあります。VariationInterface
ただし、PHPSpec にはバインドする IOC コンテナーがないVarientInterface
ためVarient
、クラスを実際にテストすることはできません。
具象クラスではなくインターフェイスにコーディングするのがベスト プラクティスではありませんか?
php - PHPSpec と PHPUnit を使用したアプリケーションのテスト
2 つの異なるテスト方法を使用することは可能ですか? たとえば、1 つのアプリケーションまたはパッケージ内の PHPUnit と PHPSpec ですか?
誰にもガイダンスはありますか?
php - PhpSpec と Prophecy の問題のモック
PhpSpec
と を使用しているメソッドをテストしようとしていProphecy
ます。しかし、私はそれを機能させるのに少し問題があります。モックに実際の値を使いたくないので を使ったのですがArgument::any()
、メソッド内で実際の呼び出しを実行したいようです。これがモックが防ぐべきものだと思いましたか?
私のクラス:
私のテスト:
そして、私が戻ってきたエラー:
エラー: Double\Illuminate\Validation\Factory\P2::make() に渡される引数 1 は、/Users/will/development/personal/blog/app/Blog/Service/Laravel で呼び出される、指定されたオブジェクトの型配列でなければなりません32 行目の /CreatePostValidator.php および /Users/will/development/personal/blog/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php(49) で定義:
eval()'d コード行 10