【发布时间】:2021-11-16 21:50:06
【问题描述】:
我是单元测试的新手。该应用程序具有helpers(App\Helpers\Helper、'Helper' => App\Helpers\Helper::class 已添加到 config 中的别名中)。
对于测试,有必要使用助手的功能,因为授权通过另一个服务,我从助手那里发送所有请求。
测试代码本身:
class ParticipantsTest extends TestCase
{
use RefreshDatabase;
public function test_createParticipants()
{
$participant = Helper::getRandParticipant();
$type_participant = Helper::getType(2);
$token = Helper::chooseToken($type_participant);
$response = $this->post('/api/participants/create', [
'token' => Helper::renewToken($participant, $token),
'type_participant' => $type_participant,
'callback' => $this->faker->sentence(20),
]);
$response->assertStatus(200);
$this->assertTrue(count(Task::all()) > 1);
}
}
通过测试时出现错误:
尝试读取
null上的属性“参与者”
虽然当我使用getRandParticipnat 方法向API 发送测试请求时,我得到了一个随机参与者,并且在测试中是null,我该如何解决它?
谢谢
UPD:
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
我想我需要重新配置 mysql 连接?如果我这样做,可以用我的真实数据测试 clear DB 吗?
【问题讨论】:
-
如果您从
Helper::getRandParticipant()得到null并且您不知道为什么,请分享该代码......我们不是知道为什么的魔术师。另外,将您的 IDE 更改为不执行ClassName :: method或$ this-> method1-> method2 ($ parameter),这不遵循 PSR 并且真的很难阅读... -
ClassName :: method or $ this-> method1-> method2 ($ parameter)做一个stackoverflow -
public static function getRandParticipnat(){ $participant = Participant::inRandomOrder()->first('participant'); return $participant->participant; }如果我在 api 上使用此功能,它可以工作,但在单元测试中不起作用 -
那么,您的数据库中是否有任何数据,所以
Participant::inRandomOrder()将返回一个模型?你100%确定你有数据吗?看来你没有。另外,我没有看到您使用factory伪造Participant's数据。 -
@matiaslauriti,我当然有数据。在问题中,我是这么说的。当我使用邮递员从 api 中获取数据时,从
getRandParticipnat()函数中,我得到了它,但是在单元测试中我有错误
标签: php laravel unit-testing phpunit