Setup Unit Test dan Behat (Acceptance) Test Pada Moodle
1. Kondisi Awal
- Moodle sudah terinstall dan berkerja seharusnya
- Sudah menjalankan
composer install
untuk menginstall depedencies php dari moodlenya - Os terbaru yang support dan sudah terinstall moodle
- Browser terbaru (Rekomendasi: Chrome atau Firefox)
- WebDriver dari browser yang digunakan (Firefox: geckodriver, Chrome: chromedriver)
- Selenium terbaru (Optional, but recommended)
- Java Runtime Environment (JRE) terbaru (Required if using Selenium)
- Meng-clone repository [git clone https://github.com/andrewnicols/moodle-browser-config](git clone https://github.com/andrewnicols/moodle-browser-config) pada folder yang bisa diakses oleh moodle (Jika menggunakan OS berbasis UNIX, directory permission)
3 sampai 7 kebutuhan untuk menjalankan Acceptance (Behat) Test
2a. Pengaturan config.php
Untuk Unit Test
- Buat sebuah folder baru untuk menyimpan moodledata untuk instance PHPUnit dengan akses sama dengan folder moodledata pada umumnya (misal:
phpu_moodledata
). - Buka file
config.php
pada root folder moodle (bukan folder moodledata) - Tambahkan kode konfigurasi untuk PHPUnit sebelum baris kode
require_once(__DIR__ . '/lib/setup.php');
:
$CFG->phpunit_prefix = 'phpu_';
$CFG->phpunit_dataroot = '<lokasi-folder>/phpu_moodledata';
- Kemudian jalankan perintah
php <lokasi-moodle>\admin\tool\phpunit\cli\init.php
melalui terminal (pastikan versi php yang digunakan sama dengan versi php yang digunakan untuk men-serve moodle). Perintah ini harus dijalankan ketika ada perubahan pada konfigurasi PHPUnit pada fileconfig.php
. Setelah perintah dijalankan moodle akan menginisialisasi instance PHPUnit (proses ini termasuk dengan membuat tabel-tabel baru pada database dengan prefixphpu_
). Kita juga bisa membuat moodle menggunakan database yang berbeda untuk instance PHPUnit-nya dengan menambahkan konfigurasi database untuk PHPUnit:
$CFG->phpunit_dbtype = 'pgsql'; // 'pgsql', 'mariadb', 'mysqli', 'mssql', 'sqlsrv' or 'oci'
$CFG->phpunit_dblibrary = 'native'; // 'native' only at the moment
$CFG->phpunit_dbhost = '127.0.0.1'; // eg 'localhost' or 'db.isp.com' or IP
$CFG->phpunit_dbname = 'mytestdb'; // database name, eg moodle
$CFG->phpunit_dbuser = 'postgres'; // your database username
$CFG->phpunit_dbpass = 'some_password'; // your database password
3a. Mejalankan Unit Test (PHPUnit)
- Untuk menjalankan test jalankan perintah
vendor/bin/phpunit
. - (Opsional) Untuk menjalankan satu test spesifik pada plugin bisa dilakukan dengan perintah
// Menjalankan semua testcase pada satu class test
vendor/bin/phpunit <lokasi-plugin>/tests/filename.php
// Menjalankan satu testcase pada satu class test
vendor/bin/phpunit --filter <testcase> <lokasi-plugin>/tests/filename.php
2b. Pengaturan config.php
Untuk Acceptance Test (Behat Test)
- Buat sebuah folder baru untuk menyimpan moodledata untuk instance Behat dengan akses sama dengan folder moodledata pada umumnya (misal:
beh_moodledata
). - Buka file
config.php
pada root folder moodle (bukan folder moodledata) - Tambahkan kode konfigurasi untuk PHPUnit sebelum baris kode
require_once(__DIR__ . '/lib/setup.php');
:
...
$CFG->behat_dataroot = '<lokasi-folder>/beh_moodledata';
$CFG->behat_wwwroot = 'http://behatlocal.moodle.com';
$CFG->behat_prefix = 'beh_';
$CFG->behat_increasetimeout = 20; // (opsional) untuk pc 'low specs'
require_once('/path/to/moodle-browser-config/init.php'); // repository yang di-clone pada baian 1 tahap ke-8
...
You will need to set the
behat_wwwroot
to your Moodle site, but it must use a different value to your$CFG->wwwroot
. One common way to do this is to use127.0.0.1
for behat, but localhost for standard use. Alternatively you can add an additional hostname in your/etc/hosts
file and use this instead. If you use Docker, then you may be able to usehost.docker.internal
where your site is hosted on the docker host
- Kemudian jalankan perintah
php <lokasi-moodle>\admin\tool\behat\cli\init.php
melalui terminal (pastikan versi php yang digunakan sama dengan versi php yang digunakan untuk men-serve moodle). Perintah ini harus dijalankan ketika ada perubahan pada konfigurasiBehat
pada fileconfig.php
. Setelah perintah dijalankan moodle akan menginisialisasi instance Behat (proses ini termasuk dengan membuat tabel-tabel baru pada database dengan prefixbeh_
). Perintah ini ketika selesai akan memberikan perintah yang akan kita gunakan untuk menjalankanBehat
test.
3b. Mejalankan Acceptance Test (Behat)
- Pastikan perintah yang dijalankan pada bagian 2b tahap ke-4 berhasil dan mengembalikan perintah yang lebih kurang :
vendor/bin/behat --config <lokasi-folder>/beh_moodledata/behatrun/behat/behat.yml
- Jalankan perintah yang diberikan pada bagian 3b tahap ke-1 untuk menjalankan acceptance (behat) test
- (Opsional) Untuk menjalankan satu test spesifik pada plugin bisa dilakukan dengan perintah
// Menjalankan semua testcase yang punya tags @local_myplugin
vendor/bin/behat --config <lokasi-folder>/beh_moodledata/behatrun/behat/behat.yml --tags=@local_myplugin
Referensi
- https://moodledev.io/general/development/tools/phpunit
- https://moodledev.io/general/development/tools/behat/running
- https://docs.moodle.org/dev/PHPUnit_integration
- https://docs.moodle.org/dev/Writing_PHPUnit_tests
- https://moodledev.io/general/development/tools/behat/writing
- https://moodledev.io/general/development/tools/behat
- https://docs.moodle.org/dev/Acceptance_testing