繁体   English   中英

使用phpunit DB :: table() - > get()测试Laravel 4.2会返回数组而不是对象

[英]Testing Laravel 4.2 with phpunit DB::table()->get() returns arrays not an objects

我开始使用phpunit向传统的Laravel 4.2 webapp添加单元/功能测试,当使用DB::table时我发现了一个奇怪的错误。

这是一个非常简单的例子,测试命中一个控制器方法,该方法调用DB::table然后死掉并转储结果。

class ExternalFormTest extends TestCase {

    public function testGetExternalFormThankYouPage()
    {
        $response = $this->call('GET', 'test');

这是被击中的控制器方法。

public function getIndex()
{
    $results = DB::table('users')->get();
    dd($results);

这将返回一个数组数组。

..array(12) {
  [0] =>
  array(74) {
    'id' =>
    int(1)
    [0] =>
    int(1)
    'account_number' =>
    int(1000)
    [1] =>
    int(1000)
    'account_admin' =>
    int(1)

但如果我用浏览器点击它。

我得到了一系列对象......

array (size=12)
  0 => 
    object(stdClass)[1967]
      public 'id' => int 1
      public 'account_number' => int 1000
      public 'account_admin' => int 1
      public 'user_type' => int 1

这会在整个应用程序中导致一堆错误。 因为代码需要访问属性(即$individual_result->id ),但结果是数组。 我在内存和普通的MySql数据库中尝试使用sqlite。 这是一个错误还是我错过了一些关于Laravel如何返回结果和/或phpunit如何工作的内容。

任何的意见都将会有帮助。

这是我的phpunit.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
     backupStaticAttributes="false"
     bootstrap="bootstrap/autoload.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnFailure="false"
     syntaxCheck="false"
>
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./app/tests/</directory>
        </testsuite>
    </testsuites>
</phpunit>

获取模式由config / database.php中的“fetch”键配置。 这应该是PDO::FETCH_CLASS 也许您将它设置为PDO::FETCH_ASSOC用于测试环境? 作为一种解决方法,您可以尝试直接在控制器中设置它,看看是否可以解决它:

public function getIndex()
{
    DB::connection()->setFetchMode(PDO::FETCH_CLASS);
    $results = DB::table('users')->get();
    dd($results);
}

如果这样可行,那么只需要确定将它设置为FETCH_ASSOC

如果你在phpunit或你的控制器内使用它应该没关系。 行为(假设)是相同的。

您是否也使用- > get()方法(我猜)您的控制器在浏览器上显示结果?

至于我对laravel的了解, - > get()实际上应该将结果作为数组返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM