問題タブ [mockery]

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.

0 投票する
1 に答える
388 参照

phpunit - Omnipay の一般的な抽象クラスのテストが失敗する

別のゲートウェイのサポートを追加することを目的として、Omnipay を検討しています。Composer でインストールした後、Paypal (サンプル ゲートウェイとして) と Omnipay Common テストを実行してみました。両方のパッケージで、bootstrap.php を調整して、composer autoload ファイルを見つけられるようにしました。Paypal テストは正常に実行されます (緑)。

ただし、一般的なテストは 1 回の失敗と 38 個のエラーで失敗します。すべての失敗/エラーは、AbstractGatewayTest、AbstractRequestTest、AbstractResponseTest にあります。

これは、PHPUnit または Mockery がモック化された抽象クラスを処理する方法に何か変更があったのではないかと思います。PHPUnit 3.7.34 を使用しています。私は最近、Laravel プロジェクトに PHPUnit 4.0.* を使用していますが、Omnipay には 3.7 が必要です。

composer.lock は、Mockery 0.9.0 を使用していることを示しています。OS X Mavericks の macports 経由でインストールされた php 5.4.* を実行しています。

誰が私をつまずかせているのかについての洞察を持っていますか? ありがとう!

編集:失敗メッセージの例:

38 個のエラーがありました。

「...」は私のソースコード領域です。

0 投票する
8 に答える
21164 参照

php - Laravel Eloquent モデルのモック - Mockery でパブリック プロパティを設定する方法

PHPUnit テストでモック オブジェクト (Mockery) を使用したいと考えています。モック オブジェクトには、いくつかのパブリック メソッドといくつかのパブリック プロパティ セットの両方が必要です。クラスは Laravel Eloquent モデルです。私はこれを試しました:

...しかし、パブリック プロパティを設定すると、次のエラーが返されます。

BadMethodCallException: メソッド Mockery_0_User::setAttribute() がこのモック オブジェクトに存在しません

このエラーは、単純なクラスをモックするときには返されませんが、Eloquent モデルをモックしようとすると返されます。私は何を間違っていますか?

0 投票する
1 に答える
1439 参照

php - 関係を持つEloquentモデルに依存するクラスをテストする方法は?

関係を持つEloquentモデルに依存するクラスの単体テストを作成する最良の方法は何ですか? 例えば

  • 実オブジェクト (データベース付き)。これは簡単ですが、遅いです。

  • 実際のオブジェクト (データベースなし)。新しいオブジェクトを作成できますが、データベースに書き込まずに関連モデルを設定する方法がわかりません。

  • モック オブジェクト。Eloquent モデルで Mockery を使用すると問題が発生します (たとえば、この質問を参照してください)。

  • 他の解決策?

コンテキスト:アクセス制御にAuthority RBACでLaravelを使用しています。単体テストでアクセス ルールをテストする最適な方法を見つけたいと考えています。つまり、テスト中にユーザーの依存関係を Authority に渡す必要があります。

0 投票する
1 に答える
2758 参照

php - Laravel Controller Unit テストのモックモデルが呼び出されない

コントローラーのアクションをテストしようとしています。そのアクションはモデルの関数を呼び出し、モデルを返す必要があります。テストでは、モデルをモックし、IoC コンテナーにバインドしました。コンストラクターを介してコントローラーに注入される依存関係があります。しかし、どういうわけか、モックが見つからず、呼び出されず、代わりにモデルのライブ バージョンが呼び出されています。(ログが生成されているのでわかります。)

まず、私の単体テスト。モックを作成し、関数を期待するように伝え、IoC コンテナーに追加し、ルートを呼び出します。

次に、依存関係が挿入されるコントローラー コンストラクターです。

そして、私のコントローラーメソッド。

コントローラー メソッドは正しく呼び出されていますが、私のモックが表示されていないようで、実際のモデルの関数を呼び出しています。これにより、モックの期待が失敗し、望ましくない DB に対するチェックが行われます。

別のテストでも同じ問題が発生していますが、これは Laravel のビルトイン Facade を使用しています。

テスト:

コントローラーの方法:

エラーが表示されます:

繰り返しますが、メソッドが適切に呼び出されていることはわかっていますが、モックが使用されていないようです。

0 投票する
1 に答える
945 参照

laravel-4 - Carbon メソッドチェーンをモックする方法

私は嘲笑しようとしCarbon::parse($date)->format("Y")ていますが、どうすればいいのかわかりません。

これは私がこれまでに持っているものです:

0 投票する
2 に答える
1160 参照

php - Laravel で複数のコントローラー テストを実行できない

いくつかのレガシー コードの単体テストを記述して (途中で更新して)、既存のアプリケーションをクリーンアップしようとしています。私は多くのライブラリを書き直しましたが、TDD のアプローチをとても気に入っています。しかし、今度はいくつかのコントローラーのテストに移る時が来ました。私は最初の一連のテストで問題に遭遇しました。Jeffery Way のLaravel Testing Decodedの説明に従っています。

ここでの目標は、ログイン ルートをテストすることですhttp://my-development-server/login。コードは次のように動作するはずです。まず、誰かがすでにログインしているかどうかを確認します。ログインしている場合は、ダッシュボード (アプリのメイン ページ) にリダイレクトします。それ以外の場合は、ログイン ページをレンダリングします。かなり簡単です。

関連するルートは次のとおりです。

AccountController::getLoginメソッドは次のとおりです。

Sentryユーザー認証にライブラリを使用しています。

そして、ここに私の最初のテストがあります:

このテストは、「ユーザーがすでにログインしているときにログインを試みる」ケースをエミュレートします。checkは true (すでにログイン済み) を返し、ユーザーは という名前のルートにリダイレクトされdashboardます。それは完全に機能し、テストはパスします。

次に、「誰もログインしていないときにユーザーがログインを試みる」ケースをテストするために、新しいテストを追加します。そのテストのコードは次のとおりです。

このテストを実行すると、最初のテストはパスしますがNotFoundHttpException、2 番目のテスト メソッドで a が発生します。

この問題にはいくつかの奇妙な点があります。

  1. 最初のテスト メソッド ( ) をコメント アウトするtest_login_alreadyLoggedInと、2 番目のテストはパスします。

  2. 2 つのテスト メソッドの順序を逆にすると、test_login_notLoggedIn成功とtest_login_alreadyLoggedIn失敗になります (つまり、クラスの最初のメソッドが成功し、2 番目のメソッドが失敗します)。

これは、ある種の構成の問題のように見えます-最初のテスト(合格)の後、何かが台無しになり、2番目のテストで要求を行うことができません-しかし、私は途方に暮れています. 私は本とグーグルを何度か調べましたが、欠落している構成への参照が見つかりません。

助言がありますか?