php - 通过测试中的方法传递请求
问题描述
我的类上有一个generate()
方法,它只是create
类实例的简写方式。它接受request
在方法上提示的类型。我正在尝试对此进行单元测试,而我知道的唯一方法是make
通过answer
并通过它。这不起作用,因为它不是request
. 有解决办法吗?这是方法:
public static function generate(Question $question, Request $request): self
{
return self::create([
'user_id' => Auth::user()->getKey(),
'question_id' => $question->getKey(),
'answer_body' => $request->answer_body,
]);
}
这是测试
/** @test */
public function it_can_generate_a_new_instance()
{
$user = factory(User::class)->create();
$this->actingAs($user);
$question = factory(Question::class)->create();
$answer = factory(Answer::class)->make();
Answer::generate($question, $answer);
$this->assertEquals($user->getKey(), Answer::first()->user_id);
$this->assertEquals($question->getKey(), Answer::first()->question_id);
$this->assertEquals($answer->answer_body, Answer::first()->answer_body);
}
测试通过,直到我Request
在方法中输入提示。
解决方案
您可以使用给定的属性创建一个新的请求对象。它可能有点脆弱,但它应该可以工作:
public function it_can_generate_a_new_instance()
{
$user = factory(User::class)->create();
$this->actingAs($user);
$question = factory(Question::class)->create();
$answer = factory(Answer::class)->make();
$request = new Request([ 'answer_body' => $answer->answer_body ]);
Answer::generate($question, $request);
$this->assertEquals($user->getKey(), Answer::first()->user_id);
$this->assertEquals($question->getKey(), Answer::first()->question_id);
$this->assertEquals($answer->answer_body, Answer::first()->answer_body);
}
推荐阅读
- c - 指针的签名
- postgresql - 如何使用 go 和 docker 等待 postgres db?
- android - 关闭复选框 onCheckedChange Jetpack Compose 上的键盘
- python - 使用 YOLO4 对象检测器进行多处理或多线程
- java - 使用 Spring Boot 和 Angular 8/9 显示来自 PostgreSQL 数据库的图像列表/图像数组
- pytorch - 为什么在增加火炬张量的维度时使用 torch.repeat 代替 for 循环?
- android - 在已发布的 Android APK 中安全存储 Google 服务帐户密钥 (GCP) 的位置?
- javascript - 我的 jquery 代码无需单击即可运行,我的意思是刷新页面后,我应该在其中更改什么
- javascript - 如何允许使用“step ='number'进行增量,但允许输入“介于两者之间”?
- macos - 为什么 zsh 中只有某些插件可以工作,而其他插件不能?