Pertama-tama, saya harap saya dapat membantu Anda memperbaiki masalah Anda karena saya yakin ini adalah kesalahan konyol yang Anda buat di suatu tempat dalam koneksi.
Jadi, ini beberapa tipsnya:
Jangan menguji kode Anda "memanggil" kode kerangka kerja inti...
Alih-alih melakukan (pengujian unit):
$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());
Lakukan (uji fitur):
$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);
Dengan cara ini, Anda dapat memastikan bahwa:
- URL Anda adalah yang Anda inginkan, tanpa kesalahan ketik atau kesalahan apa pun
- Pengontrol melakukan apa yang seharusnya dilakukan, memasukkan data dalam kasus ini.
- Pengontrol memasukkan data yang ingin Anda sisipkan. Katakanlah Anda memiliki beberapa pemrosesan di balik tirai, di sini Anda dapat memastikan bahwa Anda mengirim "1 dan 3" dan itu memasukkan "peran X" (ini adalah contoh, katakanlah itu akan menjadi hasil yang Anda inginkan setelah memproses 1 dan 3, jadi Anda tidak langsung memasukkan
1 dan 3
) - selalu hindari menegaskan data dari tempat Anda mengujinya. Dalam kasus Anda, Anda menggunakan
Request
objek, katakanlah itu adalah kelas khusus Anda, dan Anda melakukan sesuatu ketika Anda melakukan$request->attribute1 =2
, jadi ketika Anda membacanya kembali sebagai$request->attribute1
mungkin Anda telah melakukan beberapa proses untuk menyimpannya dan Anda telah memodifikasinya... jika Anda menegaskan bahwa tanpa secara eksplisit mengatakantegaskan bahwa atribut1 adalah apa yang saya harapkan
Anda tidak pernah menegaskannya. Jika Anda memiliki kesalahan dalam kode Anda dan bukannya mengembalikanb
(1
=a
,2
=b
, dll.) kode akan selalu lulus, karena Anda telah menyimpannya sebagai sesuatu yang lain dari yang diharapkan, tetapi Anda menegaskan untuk apa yang telah dilakukan (misalkan kesalahan Anda mengembalikanc
bukannyab
) jadi Anda mengatakan "temukan$request->attribute1
di database" dan Anda akan menyimpanc
bukannyab
(nilai yang Anda harapkan) dan masih akan menemukannya dan lulus ujian.
Tidak perlu membuat koneksi
baru jika sama kecuali DB_DATABASE
atau serupa. Dalam hal ini, Anda cukup menentukan info itu di .env.testing
atau di phpunit.xml
. Anda .
Juga, tidak perlu melakukan
ke
pada 5.7+, jadi tetap gunakan yang sesuai dengan versi Anda. Ada perbedaan yang saya tidak ingat sekarang, tetapi untuk pengujian, tidak ada masalah.
Jadi, pastikan Anda telah mengatur DB_HOST
yang benar , DB_PORT
, DB_USERNAME
dan DB_PASSWORD
. Anda dapat memiliki host yang sama tetapi port yang berbeda, atau Anda dapat memiliki host dan port yang sama tetapi nama database yang berbeda, tetapi nama pengguna dan kata sandi yang sama. Jadi, pastikan Anda terhubung ke database yang benar.
Karena kesalahan Anda adalah tidak dapat menemukan tabel yang diinginkan, jelas Anda terhubung ke database, jadi nama pengguna dan kata sandi seharusnya tidak menjadi masalah Anda, tetapi tabel tidak ada.
Satu hal penting terakhir, apakah Anda menggunakan sifat apa pun pada tes Anda? Ada beberapa ciri untuk memigrasikan database secara otomatis dan memutarnya kembali setelah selesai, jadi Anda tidak perlu menyinkronkan migrasi secara manual di lingkungan pengujian. Anda harus menggunakan use RefreshDatabase;
sifat untuk melakukannya.
Tips terakhir, coba hindari melakukan DEF_SOMETHING
karena:
- Jika pengontrol Anda terkait dengan
Defi
, tidak perlu mengatakan "ini adalah data DEF", kami sudah tahu, jadi Anda bisa langsung melakukansesuatu
. Sama untuk database, jika nama tabel adalahcars
, hindari melakukancar_wheels
,pintu_mobil
, dll., lakukanroda
,pintu
, dll. - Hindari melakukan
X_Y
, lebih suka melakukanx_y
, sama untuk database. Selalu gunakan huruf kecil dan, untuk database, gunakansnake_case
, tetapi untuk atribut model, selalu gunakancamelCase
. (info selengkapnya tentang kasus)