gpt4 book ai didi

我的 UserController 的 PHPunit 没有覆盖所有行

转载 作者:搜寻专家 更新时间:2023-10-31 21:49:04 25 4
gpt4 key购买 nike

Symfony 项目 PHPunit 覆盖率测试

用户 Controller

public function userEdit($id, Request $request)
{

$user = $this->userRepository->findOneByCode($id);

if (!$user) {
throw new Exception("User not found!");
}

$userForm = $this->createForm(UserForm::class, $user);
$userForm->handleRequest($request);

if ($userForm->isSubmitted() && $userForm->isValid()) {
$this->userService->save($user);

return $this->redirectToRoute('user_list');
}

return $this->render(
'user/user.html.twig', [
'form' => $userForm->createView(),
]
);
}

测试用户 Controller

public function testUserEdit()
{
$client = static::createClient();
$crawler = $client->request('GET', '/user/test/edit');

$formData = array(
'username' => 'test',
'email' => 'test@test.nl',
'roles' => 'ROLE_ADMIN'
);

$this->assertEquals(
200,
$client->getResponse()->getStatusCode()
);


$form = $this->factory->create(UserForm::class);
$object = User::fromArray($formData);

$form->submit($formData);
$this->assertTrue($form->isSynchronized());
$this->assertEquals($object, $form->getData());

$view = $form->createView();
$children = $view->children;

foreach (array_keys($formData) as $key) {
$this->assertArrayHasKey($key, $children);
}

}

在 userEdit 方法中我们有一个 if 循环。但是当我们运行 PHPunit 覆盖测试时,if 循环没有被执行。提交的另一个 if 循环也不包括在内。

出了什么问题,我该怎么做才能覆盖测试?这也是 Symfony 表单测试的最佳解决方案,因为我是 PHPunit 的新手。

最佳答案

我注意到您的代码中有几处似乎是错误的:

userEdit 方法名称应为 userEditAction

选择这样的形式:$form = $crawler->selectButton('submit')->form();

“提交”文本是提交按钮上的标签(例如保存)。然后,填写字段后:$crawler = $client->submit($form);

您通过断言生成的 HTML 页面包含预期元素(例如)来检查提交是否成功:

$this->assertGreaterThan(0, $crawler->filter('h1')->count());

顺便说一句。 put: $client->followRedirects(true); 在实例化客户端之后。

示例来自 official docs .

关于测试未涵盖的一些行:每当您有 if 子句时,您都需要测试这两个条件。在你的情况下,首先你可能有一个有效的用户, User 的实例,另一种情况应该是你传递了一个无效的用户(null 或其他)。这通常是通过使用 @dataProvider 注释和方法来完成的。数据提供者方法向测试方法提供数据集。可以有多个集合,因此另一组包含无效数据以覆盖 if() 子句的其他结果。

blog有很好的例子。

关于我的 UserController 的 PHPunit 没有覆盖所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47814121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com