2016-06-01 10 views
2

私は初心者の開発者で、既存のlaravelアプリケーション用のテストスイートを開始しようとしていますが、テストでは経験がありません。今では、より多くの実質的なテストを書くためにいくつかのテストを構築していくことに自信を持っています。私はモデル上の関係をテストしようとしています(それは非常に賢明なテストではないことを認識しています)、そうするモックされたモデルオブジェクトを作成しようとしています(これもsqlite dbのメモリでこれを行う方が良いですが、ここでの目標はコントローラーをテストすることですが、そこでの認証の問題に対処する方法はわかりません)。私はこのエラーが私に教えしようとしていると私は何の助けを見つけるんだか理解していないLaravelでMockery/phpUnitを使用しているエラー

LeadTest::testFoo 
BadMethodCallException: Received Mockery_0_Lead::getAttribute(), but no expectations were specified 

:私は次のような単純な、愚かなテストがあります。

public function testFoo() 
{ 
    $lead = m::mock('Lead'); 

    $this->mock->shouldReceive('program')->once(); 

    $this->assertEquals($lead->program_id, $lead->program->id); 
} 

をしかし、私は次のエラーを取得しますグーグルで問題を見つけたり、私が見つけることができるドキュメントを読むことができます。

予想される戻り値を設定していないと仮定しますが、これはかなり一般的なテストであり、期待される戻り値をハードコードするのは正しいとは思われません。私はここで何が欠けていますか?

私はちょうど私が物事が/正しく実装を設定していることを確認するためにLaravelの関係をテストしています:

public function program() 
{ 
    return $this->belongsTo('Program'); 
} 
+0

元の関数を投稿してテストすることができれば、最終結果を正確に把握することができます。 – user3158900

答えて

2

問題は、私は期待戻り値を欠落していたということでした。それはこのような何かしてきたはずです。

$this->mock->shouldReceive('program')->once()->andReturn(someObjectOrValue); 

アサーションのような何かしてきたはずです。嘲笑ドキュメントは、私が当初考えていたよりも多くの冗長で

$this->assertEquals(someObjectOrValue, $lead->program->id); 

http://docs.mockery.io/en/latest/reference/expectations.html

関連する問題