为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Laravel 中断言分页?

如何在 Laravel 中断言分页?

PHP
POPMUISE 2024-01-19 10:08:40
我有一个具有以下方法的类别模型:public static function index(){    return self::has('posts')->paginate(1);}我的类别控制器:public function index(){    $categories = Category::index();    return view('categories.index', compact('categories'));}这是我尝试过的,我正在使用 RefreshDatabase 特征。public function test_index_view_is_working(){    factory(Post::class, 5)->create();    $response = $this->get(route('categories.index'));    $response->assertViewHas('categories', Category::index());}该测试由于某种原因失败:Failed asserting that two objects are equal.at tests/Feature/CategoryTest.php:38    37|         $response->assertViewIs('categories.index');  > 38|         $response->assertViewHas('categories', Category::index());--- Expected+++ Actual@@ @@                 'dispatchesEvents' => Array ()                 'observables' => Array ()                 'relations' => Array (+                    'posts' => Illuminate\Database\Eloquent\Collection Object (...)                 )                 'touches' => Array ()                 'timestamps' => true
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

出现此错误的原因是因为不知何故posts急切地从视图/控制器加载,而不是从测试加载。


我猜return self::has('posts')->with('posts')->paginate(1);可以修复它。


或者,您可以测试页面底部是否有分页。因为{{ $categories->links() }}会添加类似的东西Previous,Next你仍然可以寻找它。


$response = $this->get(route('categories.index'));

$response->assertSee('Next');

此外,您可以确保对类别进行分页,但不能确保您已在页面底部添加链接。


use Illuminate\Contracts\Pagination\Paginator;

...


$response = $this->get(route('categories.index'));

$this->assertInstanceOf(Paginator::class, $response->viewData('categories'));


查看完整回答
反对 回复 2024-01-19
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

setUp您是否在测试方法中运行任何迁移/工厂?

看起来您的数据库中可能没有帖子记录,因此$categories进入视图时为null

另请注意,如果您只想确保视图具有$categories可以使用的变量$response->assertViewHas('categories');。如果您想确保视图获取实际数据,这并不理想。


查看完整回答
反对 回复 2024-01-19
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信