Laravel 单元测试断言函数总是失败

Posted

技术标签:

【中文标题】Laravel 单元测试断言函数总是失败【英文标题】:Laravel unit testing assert functions always failing 【发布时间】:2020-06-04 07:29:00 【问题描述】:

我在 Laravel 根目录下创建了一个非常基本的单元测试类-->tests-->Unit-->SimpleTest.php

在文件中,我导入了我需要测试的控制器类。而测试功能是这样的。

class SimpleTest extends TestCase

   public function testLoadUsers()
   
     $controller_obj = new UsersController;
     $data_status = $controller_obj->load_users();
        if($data_status != null)
           $this->assertTrue(true);
         
        else
           $this->assertTrue(false);
         
    

  

我像这样在 Artisan 控制台中执行了这个测试用例,

php vendor/phpunit/phpunit/phpunit tests/Unit/SimpleTest.php

这总是失败。我的控制器功能也可以毫无问题地返回数据。我在没有定义任何条件的情况下进行了测试,只是,

$this->assertTrue(true);

然后就可以了。所以我假设 phpunit test 命令也没有任何问题。

【问题讨论】:

【参考方案1】:

对不起,这不是一个直接的答案。 我想也许你应该通过这个检查 $data_status 的值。

class SimpleTest extends TestCase

   public function testLoadUsers()
   
     $controller_obj = new UsersController;
     $data_status = $controller_obj->load_users();
     $this->expectOutputString('Array');
     print data_status;
   

【讨论】:

我也试过这种方法。使用 print_r() 和 var_dump() 这两个函数。基本上我在这条线上得到了错误- $data_status = $controller_obj->load_users();所以代码在进入 print_r() 函数之前退出。 所以问题不在于测试代码。 $controller_obj->load_users(); 在您的测试环境中无法正常工作。请查看this。 我也试过这个。但问题仍然存在。 UsersController 依赖什么?如果它需要数据库连接,您必须设置测试环境。我不知道你的laravel环境,所以我不能帮助你更进一步。如果可以,请考虑向我展示您的(最小)环境。 好的,我暂时不需要UserController。假设只是通过 $this->call('route_path'); 之类的路由访问;无论如何,我已经创建了 env 测试文件并定义了数据库连接。现在我得到一个 404 页面。在命令行中。

以上是关于Laravel 单元测试断言函数总是失败的主要内容,如果未能解决你的问题,请参考以下文章

JSON 响应断言失败 PHP 单元

用嘲弄来测试 Laravel 外观总是通过,即使它应该失败

Google Test -- C++单元测试框架

Google Test -- C++单元测试框架

PHP单元,使用单元测试测试laravel日志消息

单元测试 Laravel FormRequest