Laravel 5 - 单元测试 - 状态代码500,预计200

时间:2016-04-25 08:41:08

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

为什么单元测试"测试1"返回状态码500,而不是200?有人可以解释一下吗? 以下是针对相同操作的2个测试中的示例,它们返回不同的状态代码。我在两次测试中都预计会有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();
    }
}

cmd中的回复:

enter image description here

1 个答案:

答案 0 :(得分:2)

我检查了laravel.log,然后找到了下一个日志:

  

[2016-04-26 08:45:49] testing.ERROR:异常'ErrorException'用   消息'试图获取非对象的属性'   C:\ XAMPP \ htdocs中\ STP \存储\框架\视图\ 76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7   堆栈跟踪:

和下一个日志:

  

下一个异常'ErrorException',消息'试图获取属性   非对象(查看:   C:\ XAMPP \ htdocs中\ STP \资源\意见\ ADMIN \语言\ showAll.blade.php)”   在   C:\ XAMPP \ htdocs中\ STP \存储\框架\视图\ 76c117f88e2ab8d2c5f85f5187e254573559a2c3.php:7

     

堆栈追踪:

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

$ languages-> char,$ language-> name

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

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

现在两个测试都正常运行并返回状态代码200

谢谢大家的帮助。