Laravel test d'unité des contrôleurs

J'essaie de lancer une nouvelle application Laravel suivantes TDD

Ma première étape est de vérifier que le /login contrôleur est appelé la maison de l'url.

En dépit de plusieurs tutoriels je ne peux pas obtenir le test fonctionne et je ne vois pas ce que je fais mal.

Mon set up est:
compositeur pour installer laravel
compositeur installer phpunit

voici mon itinéraire:

<?php
Route::get('/login', 'AuthenticationController@login');

mon contrôleur:

<?php

class AuthenticationController extends BaseController {

    public function login () {
        return View::make('authentication.login');
    }

}

Et mon test:

<?php

class AuthenticationTest extends TestCase {

    public function testSomeTest () {

        $response = $this->action('GET', 'AuthenticationController@login');

        $view = $response->original;

        $this->assertEquals('authentication.login', $view['name']);
    }
}

L'erreur que j'obtiens est

  ErrorException: Undefined index: name

Le code comme une copie (à peu près exactement) à partir de la Laravel site, mais il ne fonctionne pas.

N'importe qui peut voir ce que je fais mal?

Il prétend $view n'a pas de nom de l'index, mais qui peut ne pas être juste comme l'exemple sur la laravel site web, ainsi que la vue est rendu à l'aide de son nom (il affiche correctement sur l'extrémité avant trop)

EDIT::

Il semble donc à partir d'un commentaire que le laravel tests unitaires de l'article n'est pas clair et que le $view['nom'] est la vérification de la variable $nom. Si c'est le cas, comment faites-vous tester le contrôleur/itinéraire utilisé, c'est à dire. ce contrôleur nom/nom d'action a été utilisée pour la route('X')

$view['name'] n'est pas le nom de la vue, mais la variable $name qui est disponible sur votre vue. Mais vous n'avez pas passer quoi que ce soit. Dans votre contrôleur, il faut par exemple return View::make('authentication.login')->with('name', 'John');, et puis vous voulez tester si $name est disponible à partir de la vue et contient "John": $this->assertEquals('John', $view['name']);.
Vraiment? Puis les docs sont trompeuses. Alors, comment puis-je tester que mon contrôleur je le feu sur une certaine route? Ou comment aurais-je obtenir le nom du contrôleur/action utilisé pour un certain itinéraire?
Je ne suis pas tout à fait sûr de ce que vous essayez d'atteindre. Si vous voulez de l'unité de test de votre application, il ne s'agit pas de tester si un itinéraire appelle la bonne méthode de contrôleur ou le contrôleur de charge la vue correcte. Cela fait partie de Laravel de la fonctionnalité et il est déjà testé. Vous voulez tester si le droit des méthodes au sein de votre contrôleur sont appelés et que la réponse est. Vous n'avez pas besoin de test de la route que les appels qui contrôleur de méthode, il vous suffit d'appeler la route qui déclenche la méthode de contrôleur que vous voulez vraiment tester.
Je suppose que ça a du sens. ma pensée était que l'id d'écrire un test que l'action login serait appelé formulaire par défaut/home route. ensuite, je voudrais vérifier qu'un autre itinéraire redirigé vers la de login d'itinéraire SI l'utilisateur n'est pas connecté. mais Si je ne peux pas obtenir l'itinéraire ou le contrôleur utilisé comment pourrais-je tester si un utilisateur non autorisé a été redirigé vers la de login/itinéraire contrôleur? Je suppose que $response = $this->call('GET', 'admin/users'); $this->assertRedirectedTo('admin/login'); est la seule chose que je peux faire (bien qu'il ne faire ce que je veux.
Oui, parce que c'est ce que vous voulez tester. Dans votre unité de test, tout ce que vous voulez savoir, c'est si les actions sont déclenchées selon que l'utilisateur est connecté ou non. Dans votre cas, vous vérifiez si la réponse est une redirection vers un certain itinéraire. Et c'est tout. Vous ne vous souciez pas ce qui se passe après ou le contrôleur est appelé - delà de la portée de votre unité de test. Vous voulez juste pour vérifier si votre application vous donne les réponses attendues pour la donnée d'entrée. Configurer un utilisateur authentifié, l'appel de la route et de vérifier si vous êtes redirigé vers 'admin/users', sinon, par exemple, à 'l'utilisateur/login'.

OriginalL'auteur atmd | 2014-07-22