php - Laravel 5 - 单元测试 - 状态码 500,预期 200

标签 php unit-testing laravel laravel-5 mockery

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

语言 Controller

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

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

语言 Controller 测试

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 中的响应:

enter image description here

最佳答案

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

[2016-04-26 08:45:49] testing.ERROR: exception 'ErrorException' with message 'Trying to get property of non-object' in C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7 Stack trace:

和下一个日志:

Next exception 'ErrorException' with message 'Trying to get property of non-object (View: C:\xampp\htdocs\STP\resources\views\admin\languages\showAll.blade.php)' in C:\xampp\htdocs\STP\storage\framework\views\76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7

Stack trace:

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

$languages->char, $language->name

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

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

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

感谢大家的帮助。

关于php - Laravel 5 - 单元测试 - 状态码 500,预期 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36835671/

相关文章:

php - 在 Laravel 5.7 中更新行不起作用,如何修复?

javascript - 使用 PHP 排除特定的 html 标签及其中的内容

php - MySQL 仅使用变量的第一个字进行选择

php - laravel 资源 Controller /路由和模型

unit-testing - 为什么Spock Framework推荐使用SUS,但是在任何例子中都没有这个缩写?

c# - RhinoMocks 错误 "Only assignment, call, increment, decrement, and new object expressions can be used as a statement"

mysql - laradock_mysql 无法启动并退出(1)

php - 我可以运行一个 PHP 脚本来运行一个 C 脚本,然后创建一个文件吗?

php - 制作长度不断增加的星号和零的图案

unit-testing - 使用 testImplementation 项目在另一个模块中测试时未解析的引用(:deepestModule)