在laravel 5.2中测试时,模拟对象的NoMatchingExpectationException

时间:2017-09-07 18:28:03

标签: php laravel unit-testing laravel-5.2 mockery

我的测试方法:

public function testProjectTmpImageCanBeUploaded(){
    // \Illuminate\Http\UploadedFile; 
    $file = m::mock(UploadedFile::class, [
        "getClientOriginalName" => "author",
        "getClientOriginalExtension" => "jpg",
        "isValid" => true,
    ]);

    $file->shouldReceive('move')
        ->once()
        ->with(config('app.tmp_folder_name')."/project", 'author-now.jpg');

    $url = route('upload-project-image');

    $this->call("POST", $url,
        [
            'field' => 'photo',
            'item_name' => 'project',
        ]
        ,[],['file' => $file]);
}

我也有方法,它使用下一个代码:

if ($file->isValid()) {

        $file->move($path, $fileName);// 
    }

这段代码工作正常,参数是正确的,但是当我执行测试时它会失败并显示下一条:

  

[2017-09-07 18:21:49] testing.ERROR:Mockery \ Exception \ NoMatchingExpectationException:找不到Mockery_0_Illuminate_Http_UploadedFile :: move(" C:\ OServer \ OpenServer \ domains \ site)的匹配处理程序。 local \ blog \ public / tmp / project /"," project-now.jpg")。方法是意外的,或者它的参数与此方法的预期参数列表没有匹配

有人知道,这个测试的问题是什么?

我使用的是Laravel 5.2.45。

1 个答案:

答案 0 :(得分:0)

好吧,如果你仔细观察,你会在测试中看到你有第二个参数author-now.jpg但是Mockery在第二个参数为project-now.jpg时给你错误,所以你应该更新第二个参数你的考试