【问题标题】:Undefined variable in view when testing Laravel controller测试 Laravel 控制器时视图中未定义的变量
【发布时间】:2014-03-04 08:25:02
【问题描述】:

我正在尝试使用 PHPUnit 在 Laravel 4 中测试我的控制器上的一些操作。

public function testAboutPage()
{
    $this->client->request('GET', 'about');

    $this->assertResponseOk();
}

另外,我在App::before() 过滤器中将一个变量绑定到我的视图。

App::before(function($request)
{
    View::share('usersCount', User::remember(60)->count());
}

这是我的控制器:

class PagesController extends BaseController
{
    public function about()
    {
        return View::make('pages.about')->withTitle("About");
    }
}

但是,在测试中未定义变量之前,我的测试失败了。这是 PHPUnit 的失败输出。

12) PagesControllerTest::testAboutPage
ErrorException: Undefined variable: usersCount (View: app/views/layouts/application.blade.php) (View: app/views/layouts/application.blade.php)

app/storage/views/ed261635437f52c903a09b2774ce5a92:20
vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:41
vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:56
vendor/laravel/framework/src/Illuminate/View/View.php:134
vendor/laravel/framework/src/Illuminate/View/View.php:102
vendor/laravel/framework/src/Illuminate/View/View.php:76
app/storage/views/5993084368b648c9a244ec6637315755:18
vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:37
vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:56
vendor/laravel/framework/src/Illuminate/View/View.php:134
vendor/laravel/framework/src/Illuminate/View/View.php:102
vendor/laravel/framework/src/Illuminate/View/View.php:76
vendor/laravel/framework/src/Illuminate/Http/Response.php:70
vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php:202
vendor/laravel/framework/src/Illuminate/Routing/Router.php:1413
vendor/laravel/framework/src/Illuminate/Routing/Router.php:1003
vendor/laravel/framework/src/Illuminate/Routing/Router.php:968
vendor/laravel/framework/src/Illuminate/Foundation/Application.php:738
vendor/laravel/framework/src/Illuminate/Foundation/Application.php:708
vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:81
vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:319
app/tests/controllers/PagesControllerTest.php:109

我可以做些什么来解决这个问题?在浏览器或生产环境中查看时,该变量很好。

【问题讨论】:

  • 你能发布你的控制器代码吗?
  • 添加了我的控制器代码。如您所见,它非常简单。
  • 您的错误在testUnsubscribedPage 方法中,但您只发布了testAboutPage 方法的代码。
  • 抱歉,这个问题影响了我在 PagesController 上的所有测试。我将示例从testUnsubscribedPage 切换到testAboutPage,因为它的控制器操作非常简单。
  • 出了点问题。根本不应该调用您的视图。

标签: php testing laravel laravel-4 phpunit


【解决方案1】:

从文档中可以看出,过滤器已被禁用。我认为这只是意味着在路由文件中定义的过滤器,但它也会影响应用程序之前/之后的过滤器。

注意:在测试环境中,路由过滤器被禁用。要启用它们,请将 Route::enableFilters() 添加到您的测试中。

我已将此添加到我的测试中以使它们变绿。

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

    Route::enableFilters();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2021-04-02
    • 2017-06-06
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多