Laravel8功能测试中TestResponse的original属性与assertViewHas方法疑问
问题1:$response->original属性的含义
Illuminate/Testing/TestResponse实例的original属性存储的是控制器/路由返回的原始未渲染的响应数据:
- 你当前路由返回的是视图响应,此时
original对应的就是视图对象,可以直接通过数组语法读取你绑定到视图的所有变量,你示例中的$response->original['tests']就是直接取到绑定给test.dashboard视图的tests变量值。 - 如果是返回JSON接口的场景,
original存储的就是你返回的数组/模型等原始数据,而非序列化后的JSON字符串。
// 对应你的示例代码 $response = $this->get(route('test.dashboard')); $tests = $response->original['tests'];
问题2:assertViewHas方法的作用
assertViewHas不是用来校验响应HTML中包含"tests"文本的,它是专门针对视图响应的断言方法,作用是校验当前返回的视图是否绑定了指定名称的变量:
- 你示例中的
$response->assertViewHas('tests')仅校验视图有没有绑定名为tests的变量,只要变量存在,不管变量值是什么都会断言通过。 - 如果需要同时校验变量的具体值,可以传入第二个参数:
$response->assertViewHas('tests', $期望的变量值) - 如果你需要校验渲染后的HTML里包含指定文本,应该使用
assertSee方法。
// 对应你的示例代码 $response = $this->get(route('test.dashboard')); $response->assertViewHas('tests');
内容的提问来源于stack exchange,提问作者Arav
相关产品推荐
相关产品推荐

