Testare le facciate di laravel con la beffa passa sempre, anche quando dovrebbe fallire
-
21-12-2019 - |
Domanda
Sto cercando di prendere in giro alcune facciate a Laravel durante il test dell'unità, ma sembra che i test passino sempre, non importa cosa.
Ad esempio, questo esempio prelevato dai documenti Laravel qui:
Event::shouldReceive('fire')->once()->with('foo', array('name' => 'Dayle'));
.
Sembra che io possa metterlo in nessuno dei metodi di prova e passano sempre anche se nulla del genere è stato fatto con la facciata Event
.
Ecco la classe di test:
class SessionsControllerTest
extends TestCase
{
public function test_invalid_login_returns_to_login_page()
{
// All of these pass even when they should fail
Notification::shouldReceive('error')->once()->with('Incorrect email or password.');
Event::shouldReceive('fire')->once()->with('foo', array('name' => 'Dayle'));
Notification::shouldReceive('nonsense')->once()->with('nonsense');
// Make login attempt with bad credentials
$this->post(action('SessionsController@postLogin'), [
'inputEmail' => 'bademail@example.com',
'inputPassword' => 'badpassword'
]);
// Should redirect back to login form with old input
$this->assertHasOldInput();
$this->assertRedirectedToAction('SessionsController@getLogin');
}
}
.
Cosa mi manca per testare le facciate?Ho ragione nel pensare che dovrei essere in grado di chiamare shouldReceive()
su qualsiasi facciata di layavel senza alcuna configurazione?
Soluzione
Hai bisogno di dire a derinery di eseguire la sua verifica.Puoi farlo mettendo
\Mockery::close();
.
Alla fine del metodo di prova o nel metodo di teatrodown della classe di test.
In alternativa, potresti impostare l'integrazione di phpunit della beffa aggiungendo questo al tuo phpunit.xml
<listeners>
<listener class="\Mockery\Adapter\Phpunit\TestListener"></listener>
</listeners>
.
Vedi http://docs.mockery.io/en/latest/reference/phpunit_integrazione.html Per ulteriori informazioni.