Laravel 5.5中BrowserKitTestCase单次测试多次调用visit()失败问题
解决Laravel 5.5 BrowserKitTestCase单测试多次visit断言失败的问题
我之前也碰到过一模一样的问题,其实核心原因很简单:同一个测试方法里多次调用visit()时,BrowserKit客户端会保留之前请求的所有状态(会话、Cookie、响应数据等),这些残留状态会干扰后续的断言逻辑——比如第二个see()可能还在检查第一个请求的页面内容,或者会话状态影响了第二个请求的页面渲染结果。
给你两个可行的解决方案:
方案1:用resetBrowser()彻底重置浏览器状态
这是最直接有效的方法,它会清空BrowserKit客户端的所有残留状态,让下一次visit()完全是全新的请求:
/* @test */ function my_simple_test(){ $this->visit('product/1') ->see('Product #1'); // 重置浏览器,清除之前的会话、Cookie和响应残留 $this->resetBrowser(); $this->visit('product/2') ->see('Product #2'); }
方案2:针对性清除会话状态(适合特定场景)
如果确定只是会话数据导致的问题,也可以只清除会话而不重置整个浏览器:
/* @test */ function my_simple_test(){ $this->visit('product/1') ->see('Product #1'); // 清空当前会话数据 $this->flushSession(); $this->visit('product/2') ->see('Product #2'); }
至于为什么拆分测试就能正常通过?因为Laravel的测试框架会在每个测试方法执行前后自动重置整个应用状态,包括会话、数据库连接、客户端状态等,所以拆分后的每个测试方法都是完全独立的环境,不会互相干扰。
内容的提问来源于stack exchange,提问作者lubart
相关产品推荐
相关产品推荐

