Laravel 5 - 单元测试 - 状态码为500,期望为200

3

为什么“测试 1”中的单元测试返回状态代码500而不是200?有人能解释一下吗?以下是对同一操作的两个测试示例,它们返回不同的状态代码。我期望在这两个测试中都会得到200?

LanguageController

    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();
    }
}

在命令提示符中的响应:

在此输入图片描述


4
你尝试过查看Laravel错误日志文件吗? - Jono20201
查看日志文件会非常有帮助,但我猜想您没有正确地模拟 languageRepo。 - Mohamed Bouallegue
app/exceptions/Handler.php 中为 $dontReport(不应报告的异常类型列表)设置一个空数组可以帮助测试中的故障排除,因为它们可以以这种方式在日志中查看。 - apex39
1个回答

2

我查看了laravel.log,发现了下面的日志:

[2016-04-26 08:45:49] testing.ERROR: exception 'ErrorException' with message '尝试获取非对象的属性' in C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7 Stack trace:

以及下一个日志:

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

堆栈跟踪:

在我的视图中,我使用以下方式访问$language属性:

$languages->char, $language->name

但这是一个数组,所以我应该使用以下方式访问:

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

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

感谢大家的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接