热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Laravel/PHPUnit:断言两个模型的相同性

如何解决《Laravel/PHPUnit:断言两个模型的相同性》经验,为你挑选了1个好方法。

在Laravel中进行集成测试(使用数据库)时.断言同一个Eloquent模型的两个实例是一样的最好的方法是什么?

的assertEquals $model $model

简单地使用就->assertEquals($modelOne, $modelTwo);不会工作,即使它们相同的PHPUnit检查类属性,例如wasRecentlyCreated 有时模型ids可以是字符串或整数.

的assertEquals $model->id $model->id

这里的问题是模型一可能是另一个模型的实例,例如:

AssertEquals(Person::find(1)->id, Animal::find(1)->id); 返回true.

的assertEquals $model->toArray() $model->toArray()

这里的问题是属性并不总是被转换为相同的类型,我不是100%确定为什么,但有时模型属性将是一个int和其他时间的数字string

AssertEquals($address->toArray(), $user->address->toArray())

[ postcode => 2454 ]
[ postcode => "2454" ]
如何以简单,干净和可重复的方式断言两个Eloquent模型是相同的数据库记录?

Jonathon.. 11

一种选择是使用PHPUnit的assertTrue方法与组合is的方法Illuminate\Database\Eloquent类.

$this->assertTrue($modelOne->is($modelTwo));

is如果作为参数传递的模型不是null,具有相同的主键,相同的表和相同的连接,则该方法将返回true .

关于测试属性的相同性,您应该assertEquals在每个模型的属性上使用PHPUnit是安全的,您可以使用它来检索getAttributes.

$model1 = new Model(['id' => 1, 'name' => 'test', 'enabled' => 0, 'number' => '1']);
$model2 = new Model(['id' => 1, 'name' => 'test', 'enabled' => false, 'number' => 1]);

$this->assertEquals($model1->getAttributes(), $model2->getAttributes());

在我的测试中,我发现这些断言通过了.该assertEquals方法松散地比较值,因为值被比较为使用==而不是严格比较(或标识)运算符===.在内部,它将对提供的两个数组进行排序,并使用相同的键松散地比较值.如果在一个模型上有任何额外的属性而在另一个模型上没有,则断言也将失败.



1> Jonathon..:

一种选择是使用PHPUnit的assertTrue方法与组合is的方法Illuminate\Database\Eloquent类.

$this->assertTrue($modelOne->is($modelTwo));

is如果作为参数传递的模型不是null,具有相同的主键,相同的表和相同的连接,则该方法将返回true .

关于测试属性的相同性,您应该assertEquals在每个模型的属性上使用PHPUnit是安全的,您可以使用它来检索getAttributes.

$model1 = new Model(['id' => 1, 'name' => 'test', 'enabled' => 0, 'number' => '1']);
$model2 = new Model(['id' => 1, 'name' => 'test', 'enabled' => false, 'number' => 1]);

$this->assertEquals($model1->getAttributes(), $model2->getAttributes());

在我的测试中,我发现这些断言通过了.该assertEquals方法松散地比较值,因为值被比较为使用==而不是严格比较(或标识)运算符===.在内部,它将对提供的两个数组进行排序,并使用相同的键松散地比较值.如果在一个模型上有任何额外的属性而在另一个模型上没有,则断言也将失败.


推荐阅读
  • 这个链接相当于整个官方文档的目录:DjangodocumentationcontentsGettingstartedDjangoataglanceDesignyo ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 数据库技术:execute immediate
    首先在这里发发牢骚,指责下那些刻板的书写方式,不考虑读者理不理解,感觉就是给专业人员用来复习用的一样,没有前戏,直接就高潮,实在受不了!没基础或基础差的完全不知道发生了什么,一脸懵 ... [详细]
  • AndroidJetpackNavigation基本使用本篇主要介绍一下AndroidJetpack组件Navigation导航组件的基本使用当看到Navigation单词的时候应 ... [详细]
  • Go设计模式实现,包含常见的设计模式实现,同时这也是极客时间-设计模式之美的笔记,源课程采用Java实现,本系列会采用Go实现课程:65|迭代器模式(上):相比直接遍历集合数据,使 ... [详细]
  • 苹果发布无人车安全报告,内容竟只有7页?
    众所周知,苹果无人车一直是一个极其神秘的项目。早些时候,国外媒体在加州曾拍到过苹果无人车路测的照片与视频,但是都遭到了苹果的极力否认。直到 ... [详细]
  • Haveaoracletablewithalmost1.5TBdatainit.Needtopurgeatleast0.5TBdatafromit.Thisi ... [详细]
author-avatar
Bd专业8楼nv
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有