laravel - 无法模拟类:Mockery\Exception\InvalidCountException
问题描述
我尝试为我的 Laravel 6.0 应用程序运行 phpunit 测试,但是在尝试模拟方法时,我收到此消息,因为它找不到类/方法:
Mockery\Exception\InvalidCountException:来自 Mockery_2_App_Http_Controllers_Scraper 的方法 scrapeGoogleData() 应该准确调用 1 次,但调用 0 次。
我的测试代码是:
namespace Tests\Feature;
use Tests\TestCase;
use App\Http\Controllers\Scraper;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ScrapeTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function test_scrapeGoogleData() {
$this->mock(Scraper::class, function ($mock) {
$mock->shouldReceive('scrapeGoogleData')->once();
});
Scraper::scrape('www.google.com');
}
“scrapeGoogleData”方法肯定会在从该Scraper::scrape
方法调用时运行。但是出于某种原因,嘲弄看不到这一点。我收到此错误:
Mockery\Exception\InvalidCountException:来自 Mockery_2_App_Http_Controllers_Scraper 的方法 scrapeGoogleData() 应该准确调用 1 次,但调用 0 次。
我究竟做错了什么?
解决方案
您正在模拟整个班级,因此您的 scrape 方法中的代码不会运行。您必须进行部分模拟,以保留任何未明确模拟的方法。
编辑:
您必须从容器中解决它,然后调用 scrape :
app(Scrape::class)->scrape('www.google.com');
推荐阅读
- azure - Azure Logic App Http Connector 是否有一种内置方式可以获取用于访问受 OIDC/OAuth2 保护的 API 的令牌?
- liferay - Liferay:删除“帐户设置”字段
- r - 将坐标从非常规格式的度数转换为十进制度数
- c# - unity 3d 使对象跟随玩家
- angular - 为什么更改事件不适用于输入?
- scala - Spark - 如何计算 Spark 1.6 数据框中的百分位数?
- sql-server - 比较 SQL Server 中的 2 个表
- c# - 实体框架可以通过开放连接吗?
- android - 无法从命令行启动模拟器
- firebase - 当我得到一个文件时,我是否也会得到子集合?