Cucumber-js: hasil skenario tidak diteruskan ke kait sebelum/sesudah

Dibuat pada 9 Agu 2017  ·  19Komentar  ·  Sumber: cucumber/cucumber-js

bug

Komentar yang paling membantu

Daripada onFailedTestStep , mengapa tidak mendefinisikan sebuah kait yang disebut AfterStep ? Mentimun-Ruby telah memiliki ini untuk waktu yang lama dan seperti yang Anda tahu - konsistensi itu penting.

Semua 19 komentar

Digigit ini. Peningkatan kami ke 3 pada mentimun pro ditangguhkan karena ini.

Apakah https://github.com/cucumber/cucumber-js/blob/fbff6b0fae54d2e341ee247addc60a9f05753f1d/src/runtime/test_case_runner.js#L109 pelakunya?

Bagian mana dari ini yang dibutuhkan sebenarnya? Apakah Anda hanya menggunakan predikat status? Tampaknya itu satu-satunya hal yang digunakan dalam dokumen seputar ini

Saat ini kami menggunakan scenarioResult.status , scenarioResult.scenario.uri dan scenarioResult.scenario.line .

@jbpros apakah kasus penggunaan Anda mengikuti contoh yang kami miliki saat ini di sekitar ini (menyimpan tangkapan layar saat skenario gagal)? Saya selalu berpikir itu benar-benar aneh bahwa skenario dilewatkan ke kait dan ingin menemukan cara yang berbeda untuk menangani ini.

Saat ini, saya pikir kami menambahkan fungsi kode dukungan baru: onFailedTestStep yang memungkinkan Anda mengatur fungsi untuk dipanggil dengan langkah uji gagal. Itu akan disebut dengan argumen dunia yang sama dengan langkah yang gagal dan dengan demikian Anda dapat melampirkan gambar atau sesuatu seperti itu. Kami dapat membuat modul khusus untuk mem-parsing lampiran dari formatter protokol acara dan menyalinnya ke dalam folder.

Sebagai pengguna tinker, saya ingin fungsi / handler / objek seperti itu memiliki konteks sebanyak mungkin. Bahkan tanpa sesuatu yang agung seperti seluruh pohon masa lalu dan masa depan (https://github.com/cucumber/cucumber-js/issues/875), akan sangat berguna untuk mengetahui apa langkah dan skenario saat ini setiap kegagalan.
Misalnya, ini memungkinkan saya untuk mengontrol prosedur rollback menurut tag, atau hanya melihat langkah lain apa yang dijalankan sebelum yang gagal.

Saya akan mendorong Anda untuk mempertimbangkan meneruskan ini ke onFailedTestStep , jika itu solusi yang Anda cari.

Hook Docs juga perlu diperbarui - tautan paragraf pertama ke ScenarioResult adalah 404.

Daripada onFailedTestStep , mengapa tidak mendefinisikan sebuah kait yang disebut AfterStep ? Mentimun-Ruby telah memiliki ini untuk waktu yang lama dan seperti yang Anda tahu - konsistensi itu penting.

@aslakhellesoy Saya ingin fokus pada kasus penggunaan dan pastikan kami menyelesaikannya dengan cara yang benar.

Konsistensi itu penting tetapi itu tidak berarti kita harus menyalin semuanya hanya karena itu ada di tempat lain. Kita harus berkembang saat kita menentukan cara yang lebih baik untuk menangani berbagai hal

Bisakah Anda atau @mattwynne atau seseorang dari tim ruby ​​menjelaskan untuk apa AfterStep dibuat dan untuk apa digunakan?

Saya bukan dari tim ruby ​​jadi saya tidak tahu untuk apa AfterStep dibuat, tetapi saya pribadi menggunakan AfterStep untuk melakukan berbagai operasi. Berikut beberapa contohnya:

  1. Ambil tangkapan layar dan keluarkan browser log pada skenario yang gagal
  2. Lakukan logging tambahan untuk beberapa proyek terlepas dari apakah itu gagal atau tidak
  3. Membersihkan

Bagi kami, kami akan membutuhkan skenario dan hasilnya untuk diteruskan ke AfterStep untuk melakukan logging tambahan. Saya yakin ada kasus penggunaan lain yang membutuhkannya di AfterStep , juga, yang bahkan belum kami pertimbangkan.

Ini berarti jika ada sesuatu seperti onFailedTestStep , kita akan memiliki lebih dari satu cara untuk mencapai hal yang sama: satu menggunakan AfterStep dan yang lainnya menggunakan onFailedTestStep .

Ini dapat menyebabkan inkonsistensi dalam proyek juga tergantung pada siapa yang mengimplementasikan hook; beberapa mungkin menggunakan AfterStep sementara yang lain mungkin menggunakan onFailedTestStep . Saya tidak berpikir keduanya diinginkan.

@charlierudolph

Saya ingin memahami dari mana Anda berasal. Maukah Anda menjelaskan mengapa Anda memikirkan hal berikut?

Saya selalu berpikir itu benar-benar aneh bahwa skenario itu diteruskan ke kait

Saya tidak pernah benar-benar menyukai pencampuran dua paradigma. Kait Sebelum / Setelah terkait dengan pengaturan / pembongkaran dengan benar-benar menjalankan tes. Menggunakannya untuk juga melaporkan sepertinya sesuatu yang harus diurus secara terpisah

Ambil tangkapan layar dan keluarkan browser log pada skenario yang gagal

Jika Anda melakukan ini di AfterStep, ini dilakukan untuk langkah yang gagal , bukan skenario yang gagal. Inilah yang digunakan semua contoh dalam repo untuk objek skenario dan itulah mengapa saya ingin membuat kait baru untuk kasus penggunaan khusus ini. Saya belum pernah mendengar use case menarik lainnya.

Lakukan logging tambahan untuk beberapa proyek terlepas dari apakah itu gagal atau tidak

Jenis logging tambahan apa yang Anda lakukan?

Membersihkan

Apa yang harus dibersihkan setelah satu langkah?

Bagi kami, kami akan membutuhkan skenario dan hasilnya untuk diteruskan ke AfterStep untuk melakukan logging tambahan. Saya yakin ada kasus penggunaan lain yang membutuhkannya di AfterStep juga, yang bahkan belum kami pertimbangkan.

Saya mencoba mengumpulkan kasus penggunaan itu. Terkadang orang mungkin menggunakannya ketika ada cara lain untuk melakukannya atau sebagai solusi untuk sesuatu yang dapat kami bangun dengan dukungan yang lebih baik.

Ini berarti jika ada sesuatu seperti onFailedTestStep, kita akan memiliki lebih dari satu cara untuk mencapai hal yang sama: satu menggunakan AfterStep dan yang lainnya menggunakan onFailedTestStep.

Cucumber-js saat ini tidak memiliki AfterStep dan saya tidak berencana untuk mengimplementasikan keduanya.

Saya sedang dalam proses mencoba untuk mendapatkan dukungan mentimun 3 dalam kerangka busur derajat-mentimun dan saya benar-benar dapat menggunakan AfterStep . Saya menyadari bahwa perpustakaan yang merekatkan dua perpustakaan lain bukanlah kasus penggunaan yang paling umum, tetapi itu akan membuatnya jauh lebih sederhana. Saya mencoba mencari cara untuk melakukannya dengan hal-hal protokol acara baru, tetapi saya tidak mendapatkan konteks fitur/skenario/langkah di salah satu acara *-finished . Kami menggunakan nama, uris, dan nomor baris dari fitur, skenario, dan langkah-langkah untuk melaporkan kembali ke busur derajat dan memberikan integrasi IDE (Intellij) sesuatu untuk ditampilkan dan dinavigasi di pohon mereka. $0,02 saya.

Hanya untuk menyebutkan bahwa semua fungsi yang dibahas (dan banyak lagi) dapat diselesaikan dengan setDefinitionFunctionWrapper .
Anda dapat membungkus semua langkah dengan tindakan sebelum/sesudah, yang tidak hanya memungkinkan Anda untuk bereaksi terhadap input dan output langkah, tetapi bahkan mengubahnya.

Jadi, misalnya, saya menggunakannya untuk menerapkan langkah "Langkah berikutnya harus gagal dengan kesalahan XYZ", yang memungkinkan saya untuk dengan cepat menerapkan pemeriksaan negatif mendalam dan simulasi kesalahan tanpa menerapkan langkah negatif duplikat atau penanganan kesalahan khusus yang dapat dibalik di setiap langkah .

Saya pikir tidak ada yang bisa dilakukan oleh AfterStep hook yang setDefinitionFunctionWrapper tidak bisa.

Ada pembaruan tentang ini? Mencoba memutakhirkan dari 2.0.0 ke 3.0.0 di tempat kerja dan masih belum ditentukan untuk scenarioResult

@paul-phillips-ark ya, lihat #905. Jika Anda ingin membantu memajukannya, Anda dapat membuka cabang dan mengirimkan pr baru yang membahas komentar @charlierudolph .

Ketika saya console.log(scenarioResult) saya masih tidak terdefinisi dalam fungsi Sebelum dan Setelah? Apakah saya melewatkan sesuatu? Maaf jika komentar di atas terdengar padat.

Kasus penggunaan saya saat ini adalah sebagai berikut:

Sebelum setiap skenario saya meminta perlengkapan yang mengisi database saya untuk pengujian. Setiap fitur memiliki perlengkapan sendiri yang diperlukan untuk itu. Jalur perlengkapan di server mengulangi jalur fitur, jadi saya juga memerlukan opsi uri :

Before({ timeout: 60 * 1000 }, scenarioResult => {
    ...
    const file = scenarioResult.scenario.feature.uri;
    ...
});

Pada After sebanyak dari kita, saya membuat tangkapan layar:

After(scenarioResult => {
    if (scenarioResult.status === 'failed') {
      driverUtils.takeScreenShot(scenarioResult.scenario.name);
    }
});

@charlierudolph bisakah Anda memotong rilis dengan permintaan tarik #905 sebagai solusi sementara? ini memungkinkan kita untuk menyelesaikan transisi dari v2 ke v3 - yang saat ini macet karena regresi/perubahan ini. refactoring yang Anda usulkan dapat masuk ke permintaan tarik lain.

Ada beberapa masalah untuk #905 tetapi saya akan mencoba memperbaikinya dan merilisnya akhir pekan ini.

Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Silakan buka edisi baru untuk bug terkait.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat