【问题标题】:Testing Controller method that is not linked to any routes测试未链接到任何路由的控制器方法
【发布时间】:2019-03-19 12:28:16
【问题描述】:

所以我给出了我的控制器和 web.php 文件的示例。

controller
{
   public function add() 
   {
      //Method called via web.php
   }
   public function multiply() 
   {
      //how to access this while testing
   }
}

web.php

route::get('/add','controller@add');

现在我要执行单元测试

case1: add $response = $this->get(route('add')); 现在它会在访问/add 并访问控制器方法add 时发送一个get 请求。然后我可以使用各种断言来检查它的功能。

case2: multiply 这里没有指定路由,所以无法访问控制器方法。

在这种情况下如何测试我的乘法方法

更新答案

所以从所有的答案和 cmets 中,我已经明白在 Laravel 中

  1. 单元测试 - 创建一个控制器实例,然后调用您要测试的方法。
  2. 功能测试 - 在这种测试模式下,我们将调用路由并测试是否命中了正确的方法以及它是否按预期工作。

谢谢!!

【问题讨论】:

  • 那些对我来说不像单元测试。要进行单元测试,您需要实例化您想要测试的控制器,然后调用您想要测试的方法。
  • 好吧,我不知道。让我检查一下。无论如何谢谢
  • 仅供参考 通过路由进行的测试通常被称为功能测试。 Laravel 的默认结构有一个这样的样本以及一个单元测试的样本 - laravel.com/docs/5.8/testing#introduction
  • @DarrylE.Clarke 非常感谢。 :)

标签: php laravel unit-testing web testing


【解决方案1】:

您可以在测试文件中创建控制器对象,如下所示。

 public function testBasicTest()
 {
    $object = (new UsersController());
    $response = $object->methodName();
    $this->assertTrue($response);
 }

【讨论】:

  • 我得到了正确的响应,但是当我尝试使用 asertStatus(200) 进行断言时我得到了。错误是 rror:调用未定义的方法 Tests\Unit\templateTest::assertStatus()
  • Laravel 为您的 PHPUnit 测试提供了多种自定义断言方法。这些断言可以在从 json、get、post、put 和 delete 测试方法返回的响应中访问:来自 Laravel 官方文档
  • 你能确定所有的断言都可以执行吗? assertTrue 正在工作,assertStatus() 和 assertJson 没有
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多