Allereerst hoop ik dat ik je kan helpen je probleem op te lossen, want ik ben er vrij zeker van dat het een domme fout is die je ergens in de verbinding maakt.
Dus, hier zijn enkele tips:
Test uw code niet door de kernraamwerkcode aan te roepen...
In plaats van te doen (eenheidstest):
$request = new Request();
$request->DEF_NOM = 'test';
$request->DEF_DESCRIPTION = 'testdescriptio ajhsg ln';
$request->DEF_NBSEMAINES = 2;
$request->DEF_CONSEILS = 'jhasnciu launh sl';
$request->DEF_VISIBLE = 1;
$request->DEF_DATE_VISIBLE = Carbon::now()->toDate();
$request->COA_ID = 3;
$dfc = new DefiCoachController();
$response = $dfc->createDefiTest($request);
$this->assertDatabaseHas('cbs_defis', $request->all());
Doen (functietest):
$data = [
'nom' => 'test',
'description' => 'testdescriptio ajhsg ln',
'nbsemaines' => 2,
'conseils' => 'jhasnciu launh sl',
'visible' => 1,
'date_visible' => Carbon::now()->toDate(),
'coa_id' => 3,
];
$response = $this->post('your_desired_url_for_this_action', $data); // This can be get, post, put or delete
$this->assertDatabaseHas('cbs_defis', $data);
Op deze manier kunt u ervoor zorgen dat:
- Uw URL is degene die u wilt, zonder typfouten of fouten
- De controller doet wat hij moet doen, in dit geval gegevens invoeren.
- De controller voegt de gegevens in die u wilt invoegen. Laten we zeggen dat je wat verwerking achter gordijnen hebt, hier kun je ervoor zorgen dat je "1 en 3" hebt verzonden en dat het "rol X" heeft ingevoegd (het is een voorbeeld, laten we zeggen dat dit het gewenste resultaat zou zijn na het verwerken van 1 en 3, dus je voegt niet direct
1 and 3
in ) - altijd vermijden het beweren van gegevens van waaruit u het test. In uw geval gebruikt u
Request
object, laten we zeggen dat het uw aangepaste klasse is, en u doet iets wanneer u$request->attribute1 = 2
doet , dus als je het terugleest als$request->attribute1
misschien heb je een proces gedaan om het op te slaan en heb je het aangepast... als je dat beweert zonder expliciet te zeggenassert that attribute1 is what I expect
je beweert het nooit. Als je een fout in je code hebt en in plaats vanb
. terug te sturen (1
=a
,2
=b
, etc.) de code zal altijd doorgaan, omdat je het hebt opgeslagen als iets anders dan verwacht, maar je beweert voor wat het heeft gedaan (laten we zeggen dat je foutc
heeft geretourneerd in plaats vanb
) dus je zegt "find$request->attribute1
in de database" en je hebtc
. opgeslagen in plaats vanb
(uw verwachte waarde) en het zal het nog steeds vinden en de test doorstaan.
Het is niet nodig om een nieuwe connection
aan te maken als het hetzelfde is, behalve voor DB_DATABASE
of vergelijkbaar. In dat geval definieert u die informatie gewoon in .env.testing
of in uw phpunit.xml
.
U hoeft ook geen <server name="DB_CONNECTION" value="testing"/>
te doen en <env name="DB_CONNECTION" value="testing"/>
. Als je Laravel GitHub's phpunit.xml
ziet , zul je zien dat ze <env>
. hebben gewijzigd naar <server>
op 5.7+, dus blijf bij degene die overeenkomt met uw versie. Er is echter een verschil dat ik me nu niet meer kan herinneren, maar voor het testen is er geen probleem.
Zorg er dus voor dat u de juiste DB_HOST
. hebt ingesteld , DB_PORT
, DB_USERNAME
en DB_PASSWORD
. U kunt dezelfde host hebben maar een andere poort, of u kunt dezelfde host en poort hebben maar een andere databasenaam, maar dezelfde gebruikersnaam en hetzelfde wachtwoord. Zorg er dus voor dat u verbinding maakt met de juiste database.
Aangezien uw fout is dat het de gewenste tabel niet kan vinden, maakt u duidelijk verbinding met een database, dus gebruikersnaam en wachtwoord zouden niet uw probleem moeten zijn, maar de tabel bestaat niet.
Een laatste belangrijk ding, gebruik je een eigenschap op je tests? Er zijn enkele kenmerken om de database automatisch te migreren en terug te draaien wanneer u klaar bent, dus u hoeft uw migraties niet handmatig te laten synchroniseren in de testomgeving. U zou use RefreshDatabase;
eigenschap om dit te doen.
Laatste tip, probeer DEF_SOMETHING
te vermijden omdat:
- Als je controller gerelateerd is aan
Defi
, het is niet nodig om te zeggen "dit zijn DEF-gegevens", dat weten we al, dus u kunt directsomething
doen . Hetzelfde voor de database, als de tabelnaamcars
is , vermijd het doen vancar_wheels
,car_doors
, enz., doewheels
,doors
, enz. - Vermijd het doen van
X_Y
, doe lieverx_y
, hetzelfde voor database. Blijf altijd bij kleine letters en, voor database, blijf bijsnake_case
, maar voor de attributen van modellen, blijf altijd bijcamelCase
. (meer info over zaken)