問題タブ [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.
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 個のエラーがありました。
「...」は私のソースコード領域です。
php - Laravel Eloquent モデルのモック - Mockery でパブリック プロパティを設定する方法
PHPUnit テストでモック オブジェクト (Mockery) を使用したいと考えています。モック オブジェクトには、いくつかのパブリック メソッドといくつかのパブリック プロパティ セットの両方が必要です。クラスは Laravel Eloquent モデルです。私はこれを試しました:
...しかし、パブリック プロパティを設定すると、次のエラーが返されます。
BadMethodCallException: メソッド Mockery_0_User::setAttribute() がこのモック オブジェクトに存在しません
このエラーは、単純なクラスをモックするときには返されませんが、Eloquent モデルをモックしようとすると返されます。私は何を間違っていますか?
php - 関係を持つEloquentモデルに依存するクラスをテストする方法は?
関係を持つEloquentモデルに依存するクラスの単体テストを作成する最良の方法は何ですか? 例えば
実オブジェクト (データベース付き)。これは簡単ですが、遅いです。
実際のオブジェクト (データベースなし)。新しいオブジェクトを作成できますが、データベースに書き込まずに関連モデルを設定する方法がわかりません。
モック オブジェクト。Eloquent モデルで Mockery を使用すると問題が発生します (たとえば、この質問を参照してください)。
他の解決策?
コンテキスト:アクセス制御にAuthority RBACでLaravelを使用しています。単体テストでアクセス ルールをテストする最適な方法を見つけたいと考えています。つまり、テスト中にユーザーの依存関係を Authority に渡す必要があります。
php - Laravel Controller Unit テストのモックモデルが呼び出されない
コントローラーのアクションをテストしようとしています。そのアクションはモデルの関数を呼び出し、モデルを返す必要があります。テストでは、モデルをモックし、IoC コンテナーにバインドしました。コンストラクターを介してコントローラーに注入される依存関係があります。しかし、どういうわけか、モックが見つからず、呼び出されず、代わりにモデルのライブ バージョンが呼び出されています。(ログが生成されているのでわかります。)
まず、私の単体テスト。モックを作成し、関数を期待するように伝え、IoC コンテナーに追加し、ルートを呼び出します。
次に、依存関係が挿入されるコントローラー コンストラクターです。
そして、私のコントローラーメソッド。
コントローラー メソッドは正しく呼び出されていますが、私のモックが表示されていないようで、実際のモデルの関数を呼び出しています。これにより、モックの期待が失敗し、望ましくない DB に対するチェックが行われます。
別のテストでも同じ問題が発生していますが、これは Laravel のビルトイン Facade を使用しています。
テスト:
コントローラーの方法:
エラーが表示されます:
繰り返しますが、メソッドが適切に呼び出されていることはわかっていますが、モックが使用されていないようです。
laravel-4 - Carbon メソッドチェーンをモックする方法
私は嘲笑しようとしCarbon::parse($date)->format("Y")
ていますが、どうすればいいのかわかりません。
これは私がこれまでに持っているものです:
php - Laravel で複数のコントローラー テストを実行できない
いくつかのレガシー コードの単体テストを記述して (途中で更新して)、既存のアプリケーションをクリーンアップしようとしています。私は多くのライブラリを書き直しましたが、TDD のアプローチをとても気に入っています。しかし、今度はいくつかのコントローラーのテストに移る時が来ました。私は最初の一連のテストで問題に遭遇しました。Jeffery Way のLaravel Testing Decodedの説明に従っています。
ここでの目標は、ログイン ルートをテストすることですhttp://my-development-server/login
。コードは次のように動作するはずです。まず、誰かがすでにログインしているかどうかを確認します。ログインしている場合は、ダッシュボード (アプリのメイン ページ) にリダイレクトします。それ以外の場合は、ログイン ページをレンダリングします。かなり簡単です。
関連するルートは次のとおりです。
AccountController::getLogin
メソッドは次のとおりです。
Sentry
ユーザー認証にライブラリを使用しています。
そして、ここに私の最初のテストがあります:
このテストは、「ユーザーがすでにログインしているときにログインを試みる」ケースをエミュレートします。check
は true (すでにログイン済み) を返し、ユーザーは という名前のルートにリダイレクトされdashboard
ます。それは完全に機能し、テストはパスします。
次に、「誰もログインしていないときにユーザーがログインを試みる」ケースをテストするために、新しいテストを追加します。そのテストのコードは次のとおりです。
このテストを実行すると、最初のテストはパスしますがNotFoundHttpException
、2 番目のテスト メソッドで a が発生します。
この問題にはいくつかの奇妙な点があります。
最初のテスト メソッド ( ) をコメント アウトする
test_login_alreadyLoggedIn
と、2 番目のテストはパスします。2 つのテスト メソッドの順序を逆にすると、
test_login_notLoggedIn
成功とtest_login_alreadyLoggedIn
失敗になります (つまり、クラスの最初のメソッドが成功し、2 番目のメソッドが失敗します)。
これは、ある種の構成の問題のように見えます-最初のテスト(合格)の後、何かが台無しになり、2番目のテストで要求を行うことができません-しかし、私は途方に暮れています. 私は本とグーグルを何度か調べましたが、欠落している構成への参照が見つかりません。
助言がありますか?