【问题标题】:NoMatchingExpectationException for mock object, when testing in laravel 5.2在 laravel 5.2 中测试时,模拟对象的 NoMatchingExpectationException
【发布时间】:2018-02-16 13:55:30
【问题描述】:

我的测试方法:

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。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 哦,谢谢你的回答,这是我的错误。但问题仍然是一样的(同样的例外)。 ` testing.ERROR: Mockery\Exception\NoMatchingExpectationException: No Matching handler found for Mockery_0_Illuminate_Http_UploadedFile::move("C:\OServer\OpenServer\domains\site.local\blog\public\/tmp/project/", "project-now .jpg”)。该方法是意外的,或者它的参数与此方法的预期参数列表不匹配。您还有其他想法吗?
    • 你应该确保两个参数完全相同,所以在测试中的应用程序中 dd 并比较它们
    • 谢谢!问题与额外的报价有关。
    猜你喜欢
    • 2014-09-05
    • 2016-05-07
    • 2023-03-04
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多