Karate: JSON diubah menjadi string ([Object Object]) saat cocok
Saya mencoba untuk mencocokkan respons API dengan skema. Saya memiliki pengaturan berikut.
Berikut adalah file fiturnya:
Feature: As a user, I would like to test APIs of member modules.
Background:
* def DIR_PATH = 'data/users/'
* def signup_request_helpers = read(<path_to_js_file>)
* def signup_response_helpers = read(<path_to_js_file>)
* def request_data = signup_request_data()
Scenario: Test signup of user
Given url my_url
And request request_data
When method POST
Then status 200
Then match response == signup_response_schema
Berikut adalah file JS yang menyimpan skema respons
var signup_response_schema = {
"success": true,
"message": "Successfully signed up.",
"data": {
"user": user_schema,
"confirmation_url": "#string",
"token": "#string",
"role": "#array"
}
};
Masalahnya adalah karate tampaknya mengubah skema respons menjadi string. Ini adalah pesan kesalahan yang saya dapatkan:
actual: {<response>}, expected: [object Object]
Harap dicatat bahwa saya dapat mencocokkan bidang string individu dengan baik. Masalahnya hanya terjadi ketika saya mencoba mencocokkan objek. Juga, saya telah mencoba mencetak skema dan variabel tampaknya memegang nilai yang benar yang merupakan objek skema.
Saya sudah mencoba yang berikut ini:
- Ubah skema menjadi string lalu JSON menggunakan arahan library. Ini tidak memverifikasi skema
- Konversikan langsung ke json yang masih menjadikan skema sebagai
[object Object]
CATATAN: Saya menjalankan Karate di buruh pelabuhan jika itu membuat perbedaan. Berikut adalah perintah yang saya gunakan di file docker-compose saya:
java -jar -Dkarate.config.dir=/app /app/karate-0.9.1.jar -T 5 path_to_file
Jawaban
JS di Karate tidak yang mulus. Ini akan berhasil:
var temp = {
"success": true,
"message": "Successfully signed up.",
"data": {
"user": user_schema,
"confirmation_url": "#string",
"token": "#string",
"role": "#array"
}
};
karate.set('signup_response_schema', temp);
Biasanya dalam *.jsfile Karate dimulai dengan functiondan berisi satu blok fungsi. Dan hasil dari membaca (mengevaluasi) blok tersebut dimasukkan ke dalam variabel Karate menggunakan def. Tetapi opsi yang direkomendasikan untuk Anda adalah ini, di mana Anda hanya memiliki JSON di file, dan ekstensi penting:
Then match response == read('signup_response_schema.json')
Perhatikan itu read()juga akan mengevaluasi ekspresi tersemat, yang dapat berguna. Meskipun JSON tidak diharapkan terbentuk dengan baik, disarankan.
Masalahnya di sini bukanlah evaluasi JS. Variabel signup_response_schemamemegang nilai yang saya tetapkan di file JS.
Masalahnya adalah dengan pencocokan skema yang sebenarnya karena salah satu kunci hilang dalam respons yang sebenarnya. Karate biasanya melempar pesan kesalahan spesifik yang menunjukkan kunci mana yang hilang tetapi untuk beberapa alasan, ini tidak terjadi di sini.