【问题标题】:Laravel 5 - Unit testing - status code 500, expected 200Laravel 5 - 单元测试 - 状态码 500,预期 200
【发布时间】:2016-08-18 13:18:50
【问题描述】:

为什么“测试 1”中的单元测试返回状态码 500,而不是 200?有人可以解释一下吗? 这是针对相同操作的 2 个测试中的示例,它们返回不同的状态代码。我预计两次测试都是 200 次?

语言控制器

    class LanguageController extends Controller implements IEntityViewManager
    { 
          public function showAllView()
          {
              $allLanguages = $this->languageRepo->orderBy('id');

              return view('admin.languages.showAll')->with('languages', $allLanguages);
          }
    }

LanguageControllerTest

class LanguageControllerTest extends TestCase
{

    public function __construct($name = NULL, array $data = array(), $dataName = '')
    {
        parent::__construct($name, $data, $dataName);
    }

    public function setUp()
    {
        parent::setUp();
    }

    public function tearDown()
    {
        Mockery::close();
    }

    protected function setUpMock()
    {
        $mock = Mockery::mock(LanguageRepositoryInterface::class);
        $this->app->instance(LanguageRepositoryInterface::class, $mock);

        return $mock;
    }

    // test 1
    public function testShowAllLanguages()
    {
        $mock = $this->setUpMock();

        $mock->shouldReceive('orderBy')->once()->andReturn([1]);

        $result = $this->action('GET', 'Entities\LanguageController@showAllView');

        var_dump("Test 1 : " . $result->getStatusCode()); // RETURNS 500
    }

    // test 2
    public function testShowAllView()
    {
        $result = $this->action('GET', 'Entities\LanguageController@showAllView');

        var_dump("Test 2 : " . $result->getStatusCode()); // RETURNS 200

        $this->assertViewHas('languages');

        $this->assertResponseOk();
    }
}

cmd 中的响应:

【问题讨论】:

  • 你试过查看 Laravel 错误日志文件吗?
  • 查看日志文件会很有帮助,但我猜你没有正确地模拟 languageRepo
  • app/exceptions/Handler.php 中为$dontReport(不应该报告的异常类型列表)设置一个空数组有助于解决测试中的错误,因为可以通过这种方式在日志中查看它们。

标签: php unit-testing laravel laravel-5 mockery


【解决方案1】:

我检查了 laravel.log 并找到了下一个日志:

[2016-04-26 08:45:49] testing.ERROR: 异常 'ErrorException' 与 消息“试图获取非对象的属性” C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7 堆栈跟踪:

和下一个日志:

下一个异常“ErrorException”,带有消息“正在尝试获取属性” 非对象(视图: C:\xampp\htdocs\STP\resources\views\admin\languages\showAll.blade.php)' 在 C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7

堆栈跟踪:

在我看来,我可以通过以下方式访问 $language 属性:

$languages->char, $language->name

但它是数组,所以我应该访问:

$language['char'], $language['name']

两个测试现在都可以正常工作并返回状态码 200

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多