Laravel功能测试报错:实际数量0与预期数量4不匹配
Laravel 功能测试返回数据计数为0的问题解决
问题根源
- 模型未持久化到数据库:你使用了
Ticket::factory()->count(5)->make(),这个方法仅创建模型实例,不会将数据保存到数据库。数据库中没有任何Ticket记录,后续查询自然返回空数组,导致计数为0。 - 更新记录的方式不可靠:即便改成
create(),直接通过where('id',5)更新记录也存在风险——Factory生成的id不一定是连续的硬编码值,硬写id=5容易出现匹配不到记录的情况。
修正后的测试代码
class FilterTicketsTest extends TestCase { use RefreshDatabase; public function test_ticket_status_filtering(): void { // 创建并保存5条记录到数据库 $tickets = Ticket::factory()->count(5)->create(); // 将最后一条记录的processed设为false $tickets->last()->update(['processed' => false]); $response = $this->get('/tickets?greater_or_equal=processed,1'); $response->assertStatus(200); $response->assertJsonIsArray('data'); $this->assertCount(4, $response['data']); } }
补充说明
如果processed是布尔类型字段,查询参数中的1会被解析为true,过滤后将返回4条processed=true的记录,与预期一致。
内容的提问来源于stack exchange,提问作者ashdoestech
相关产品推荐
相关产品推荐

