Comment faire pour obtenir l'affichage des données lors de tests unitaires dans Laravel
Je voudrais consulter le tableau donné à une vue dans une fonction de contrôleur a certaines paires clé-valeur. Comment dois-je faire cela à l'aide de tests phpunit?
//my controller I am testing
public function getEdit ($user_id)
{
$this->data['user'] = $user = \Models\User::find($user_id);
$this->data['page_title'] = "Users | Edit";
$this->data['clients'] = $user->account()->firstOrFail()->clients()->lists('name', 'id');
$this->layout->with($this->data);
$this->layout->content = \View::make('user/edit', $this->data);
}
//my test
public function testPostEdit (){
$user = Models\User::find(parent::ACCOUNT_1_USER_1);
$this->be($user);
$response = $this->call('GET', 'user/edit/'.parent::ACCOUNT_1_USER_1);
//clients is an array. I want to get this
//array and use $this->assetArrayContains() or something
$this->assertViewHas('clients');
$this->assertViewHas('content');
}
c'est de la pure phpunit?
la plupart phpunit affirmations, cependant, c'est en utilisant le framework laravel.
c'est une fonction de laravel
la plupart phpunit affirmations, cependant, c'est en utilisant le framework laravel.
assertViewHas()
n'est pas une base de phpunit extension. Je suppose que vous êtes à l'aide de certains de Sélénium trucs?c'est une fonction de laravel
OriginalL'auteur Claire | 2014-01-15
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une meilleure façon de le faire. J'ai écrit une fonction dans le cas de test qui retourne un tableau, je veux de la vue de données.
Donc, pour obtenir une valeur de la somme de données objet-je simplement utiliser
$user = $this->getResponseData($response, 'user');
$content[key]->all()
agi comme$user->all()
et retourné tous les utilisateurs! Mon esprit a soufflé que ce qui se passait et je ne peux pas expliquer comment cela se produit. J'ai dû enlever->all()
de travail pour moi dans Laravel 5.3. De toute façon qui est propre code. MerciOriginalL'auteur Claire
À l'intérieur d'un cas de test d'utilisation:
$data = $this->response->getOriginalContent()->getData();
Exemple:
Exemple dumping de données de sorte que vous pouvez voir ce que les données(array) passé à vue:
Devriez obtenir quelque chose comme ce qui est en image:
OriginalL'auteur cmac
Je l'ai réussi en le faisant d'une manière désordonnée. J'ai utilisé
assertViewHas
:OriginalL'auteur Claire
Donc en regardant comment
assertViewHas
est mis en œuvre ICI il ressemble, ce que la méthode n'est l'accès aux données de la vue après cet appel:Dans votre code, la ligne:
essentiellement renvoie la même chose que la ligne du dessus, à savoir une
\Éclairer\Http\Response
(qui s'étend à l'symfony composant\HttpFoundation\Response
)Donc, à l'intérieur de la
assertViewHas
fonction il ressemble à laravel accède aux données à l'aide de$response->$key
, je voudrais donc essayer d'accéder à laclients
et le contenu des variables via le$response
objet.Si cela ne fonctionne pas, essayez de rechercher autour de la
TestCase
fichier dans le framework Laravel ... je suis sûr que la réponse est là quelque part. Aussi essayer de vider le$response
objet et de voir à quoi il ressemble, il devrait y avoir quelques indices.La première chose que je voudrais essayer, cependant, c'est l'accès à vos données par le biais de la
$response
objet.var_dump
deresponse
elle renvoie un objet. L'objet possède une propriété privée dedata
qui est un tableau. L'objet de données contientclients
, cependant, bien sûr, les données sont protégées, donc je ne peux pas y accéder. J'ai étudié dans les classes de returner fonctions. Il n'y a aucun et je n'ai pas vraiment envie de le modifier.OriginalL'auteur berrberr
Cela a fonctionné pour moi:
Et à partir de là, vous pouvez vérifier le contenu de la boîte de message pour quelque erreur que vous pourriez vouloir vérifier.
OriginalL'auteur coderama
Vous pouvez accéder aux données dans la réponse et il peut être vérifié..
OriginalL'auteur MURATSPLAT