Pengembangan yang didorong uji meteor [ditutup]

120

Saya tidak melihat bagaimana melakukan pengembangan yang didorong oleh uji coba dalam meteor.

Saya tidak melihatnya disebutkan di mana pun dalam dokumentasi atau FAQ. Saya tidak melihat contoh atau semacamnya.

Saya melihat bahwa beberapa paket menggunakan Tinytest.

Saya butuh respon dari developer, roadmap apa tentang ini. Sesuatu di sepanjang baris:

  • mungkin, tidak ada dokumentasi, cari tahu sendiri
  • meteor tidak dibuat sedemikian rupa sehingga Anda dapat membuat aplikasi yang dapat diuji
  • ini adalah fitur yang direncanakan
  • dll
Rubycut
sumber
4
tae lihat di blog xolv.io , seperti yang disebutkan di bawah ini, ada contoh melakukan TDD Satuan + End-to-end yang tepat menggunakan Meteor.
Xolv.io
Dari nada pertanyaan Anda, sepertinya Anda memiliki kesan yang cukup banyak yang hilang dari Meteor. Di satu sisi, tetapi atmosphere.meteor.com memiliki paket untuk melakukan banyak hal yang dapat Anda pikirkan dengan menggabungkan pustaka JS yang ada dalam format siap pakai. Ini bisa dikaitkan dengan lebih banyak di meteor.com, IMHO.
pipedreambomb
5
Anda harus checkout laika - arunoda.github.io/laika
Arunoda Susiripala
1
Pengujian meteor saat ini berantakan. Lihat trello.com/c/BQ3gu0no/12-official-testing-framework untuk pembaruan.
Andrew Mao

Jawaban:

83

Pembaruan 3 : Pada Meteor 1.3, meteor menyertakan panduan pengujian dengan petunjuk langkah demi langkah untuk unit, integrasi, penerimaan, dan pengujian beban.

Pembaruan 2 : Mulai 9 November 2015, Velocity tidak lagi dipertahankan . Xolv.io memfokuskan upaya mereka pada Simpanse , dan Meteor Development Group harus memilih kerangka pengujian resmi .

Pembaruan : Velocity adalah solusi pengujian resmi Meteor mulai 0.8.1.


Tidak banyak yang telah ditulis tentang pengujian otomatis dengan Meteor saat ini. Saya berharap komunitas Meteor mengembangkan praktik terbaik pengujian sebelum menetapkan apa pun dalam dokumentasi resmi. Bagaimanapun, Meteor mencapai 0,5 minggu ini, dan banyak hal masih berubah dengan cepat.

Kabar baiknya: Anda dapat menggunakan alat pengujian Node.js dengan Meteor .

Untuk proyek Meteor saya, saya menjalankan pengujian unit saya dengan Mocha menggunakan Chai untuk pernyataan. Jika Anda tidak membutuhkan set fitur lengkap Chai, saya sarankan menggunakan should.js sebagai gantinya. Saat ini saya hanya memiliki pengujian unit, meskipun Anda juga dapat menulis pengujian integrasi dengan Mocha.

Pastikan untuk menempatkan tes Anda di folder "tes" sehingga Meteor tidak mencoba menjalankan tes Anda.

Mocha mendukung CoffeeScript , pilihan bahasa skrip saya untuk proyek Meteor. Berikut adalah contoh Cakefile dengan tugas untuk menjalankan tes Mocha Anda. Jika Anda menggunakan JS dengan Meteor, silakan menyesuaikan perintah untuk Makefile.

Model Meteor Anda akan membutuhkan sedikit modifikasi untuk mengekspos dirinya ke Mocha, dan ini membutuhkan pengetahuan tentang cara kerja Node.js. Pikirkan setiap file Node.js yang dieksekusi dalam cakupannya sendiri. Meteor secara otomatis memaparkan objek dalam file yang berbeda satu sama lain, tetapi aplikasi Node biasa — seperti Mocha — tidak melakukan ini. Untuk membuat model kita dapat diuji oleh Mocha, ekspor setiap model Meteor dengan pola CoffeeScript berikut:

# Export our class to Node.js when running
# other modules, e.g. our Mocha tests
#
# Place this at the bottom of our Model.coffee
# file after our Model class has been defined.
exports.Model = Model unless Meteor?

... dan di bagian atas uji Mocha Anda, impor model yang ingin Anda uji:

# Need to use Coffeescript's destructuring to reference
# the object bound in the returned scope
# http://coffeescript.org/#destructuring
{Model} = require '../path/to/model'

Dengan itu, Anda dapat mulai menulis dan menjalankan pengujian unit dengan proyek Meteor Anda!

Mantel hitam
sumber
2
Saya telah mencoba ini dan mengalami masalah ketika kode saya dalam pengujian menggunakan Meteor.whateverfungsi apa pun . Saya mendapatkan Meteor adalah kesalahan yang tidak ditentukan. Adakah cara untuk meminta Meteor secara eksplisit mengatasi hal ini?
Christian Schlensker
2
Christian, pendekatan yang dijelaskan dalam jawaban saya tidak lengkap saat ini, karena tidak menjalankan instance lengkap aplikasi Meteor Anda. Akibatnya, Meteorobjek tersebut tidak dapat diakses, seperti halnya dependensi model apa pun yang diekspos oleh Meteor. Meningkatkan proses ini akan melibatkan pembuatan lingkungan aplikasi dalam Mocha, dan mengekspos Meteorobjek ke pengujian Anda. Saya pasti akan memperbarui jawaban ini setelah saya memiliki solusi pengujian yang lebih lengkap. Sementara itu, jangan ragu untuk menghubungi saya jika ada pertanyaan atau saran perbaikan.
Blackcoat
@ChristianSchlensker: Jika Anda menggunakan Mocha untuk pengujian fungsional / unit di sisi klien, maka Anda memiliki objek Meteor yang tersedia. Lihat kode contoh dalam jawaban saya di bawah ini.
jerico
@jerico Ya, itu terlihat bagus, tidak akan berfungsi untuk kelas sisi server mana pun. Juga saya suka mocha --watch berjalan di semua unit test sepanjang waktu. Mereka berjalan begitu cepat di sisi server sehingga menghasilkan umpan balik pengujian yang sangat bagus.
Christian Schlensker
1
mulai 1,3 pengujian sekarang tersedia di meteor, lihat guide.meteor.com
bigmadwolf
44

Halo semua checkout laika - framework pengujian baru untuk meteor http://arunoda.github.io/laika/

Anda dapat menguji server dan klien sekaligus.

Penafian: Saya adalah penulis Laika.

Arunoda Susiripala
sumber
Hai Arunoda. Saya menghargai kerja keras Anda untuk Meteor. Di sini, di StackOverflow, Anda harus menunjukkan sebagai penafian bahwa Anda adalah orang di balik laika.
nalply
5
Apakah itu cara melakukannya?
Arunoda Susiripala
1
Terima kasih atas kerja sama Anda.
nalply
14

Saya menyadari bahwa pertanyaan ini sudah terjawab, tetapi saya pikir ini bisa menggunakan lebih banyak konteks, dalam bentuk jawaban tambahan yang memberikan konteks tersebut.

Saya telah melakukan beberapa pengembangan aplikasi dengan meteor, serta pengembangan paket, baik dengan mengimplementasikan paket untuk inti meteor, maupun untuk atmosfer .

Sepertinya pertanyaan Anda sebenarnya adalah pertanyaan dalam tiga bagian:

  1. Bagaimana seseorang menjalankan seluruh rangkaian pengujian meteor?
  2. Bagaimana seseorang menulis dan menjalankan tes untuk paket pintar individu ?
  3. Bagaimana seseorang menulis dan menjalankan tes untuk aplikasinya sendiri?

Dan, sepertinya juga ada pertanyaan bonus di sana: 4. Bagaimana menerapkan integrasi berkelanjutan untuk 1, 2, dan 3?

Saya telah berbicara dan mulai berkolaborasi dengan Naomi Seyfer (@sixolet) di tim inti meteor untuk membantu mendapatkan jawaban pasti atas semua pertanyaan ini ke dalam dokumentasi.

Saya telah mengirimkan permintaan penarikan awal yang menangani 1 dan 2 ke inti meteor: https://github.com/meteor/meteor/pull/573 .

Saya juga baru-baru ini menjawab pertanyaan ini: Bagaimana Anda menjalankan uji meteor?

Saya pikir @Blackcoat pasti menjawab 3, di atas.

Adapun bonus, 4, saya akan menyarankan menggunakan circleci.com setidaknya untuk melakukan integrasi berkelanjutan untuk aplikasi Anda sendiri. Mereka saat ini mendukung kasus penggunaan yang telah dijelaskan oleh @Blackcoat. Saya memiliki proyek di mana saya berhasil mendapatkan tes yang ditulis dalam coffeescript untuk menjalankan pengujian unit dengan mocha, seperti yang dijelaskan @Blackcoat.

Untuk integrasi berkelanjutan pada inti meteor, dan paket pintar, Naomi Seyfer dan saya mengobrol dengan pendiri circleci untuk melihat apakah kami bisa menerapkan sesuatu yang luar biasa dalam waktu dekat.

pencemburu
sumber
12

RTD sekarang sudah tidak digunakan lagi dan digantikan oleh Velocity, yang merupakan framework pengujian resmi untuk Meteor 1.0. Dokumentasi masih relatif baru karena Velocity sedang dalam pengembangan besar-besaran. Anda dapat menemukan beberapa informasi lebih lanjut tentang Velocity Github repo , Velocity Homepage dan The Meteor Testing Manual (konten berbayar)

Penafian: Saya salah satu anggota tim inti Velocity dan penulis buku ini.


Periksa RTD, kerangka pengujian penuh untuk Meteor di sini rtd.xolv.io . Ini mendukung Jasmine / Mocha / custom dan bekerja dengan JS biasa dan kopi. Ini mencakup cakupan pengujian juga yang menggabungkan cakupan unit / server / klien.

Dan proyek contoh di sini

Sebuah blog untuk menjelaskan pengujian unit dengan Meteor di sini

Pendekatan pengujian penerimaan e2e menggunakan Selenium WebdriverJS dan Meteor di sini

Semoga membantu. Penafian: Saya adalah penulis RTD.

Xolv.io
sumber
6

Saya sering menggunakan halaman ini dan mencoba semua jawabannya, tetapi dari titik awal pemula saya, saya menemukan mereka cukup membingungkan. Begitu saya mendapat masalah, saya bingung bagaimana cara memperbaikinya.

Solusi ini sangat sederhana untuk memulai, jika belum sepenuhnya didokumentasikan, jadi saya merekomendasikannya untuk orang-orang seperti saya yang ingin melakukan TDD tetapi tidak yakin bagaimana pengujian di JavaScript bekerja dan perpustakaan mana yang terhubung ke apa:

https://github.com/mad-eye/meteor-mocha-web

FYI, saya menemukan bahwa saya juga perlu menggunakan paket Atmosfir router untuk membuat rute '/ tes' untuk menjalankan dan menampilkan hasil dari tes, karena saya tidak ingin itu mengacaukan aplikasi saya setiap kali dimuat.

pipedreambomb.dll
sumber
1
Anda juga dapat menggunakan meteor-mocha-webwith mocha-phantomjsuntuk mengotomatiskan pengujian dan untuk CI. Itu yang kami gunakan. Pengungkapan penuh - Saya salah satu pengelola meteor-mocha-web.
jagill
6

Tentang penggunaan tinytest, Anda mungkin ingin melihat sumber daya yang berguna:

  1. Dasar-dasarnya dijelaskan dalam screencast ini: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. Setelah Anda memahami idenya, Anda akan menginginkan dokumentasi API publik untuk tinytest. Untuk saat ini, satu-satunya dokumentasi untuk itu ada di akhir sumber tinytestpaket: https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. Juga, screencast membicarakan tentang test-helpers, Anda mungkin ingin melihat semua pembantu yang tersedia di sini: https://github.com/meteor/meteor/tree/devel/packages/test-helpers Sering ada beberapa dokumentasi di dalam masing-masing mengajukan

  4. Menggali tes paket meteor yang ada akan memberikan banyak contoh. Salah satu cara untuk melakukannya adalah dengan melakukan pencarian Tinytest.atau test.di direktori paket kode sumber meteor

William Ledoux
sumber
5

Pengujian menjadi bagian inti Meteor dalam rilis 1.3 mendatang. Solusi awal didasarkan pada Mocha dan Chai.

Diskusi asli tentang desain minimum yang layak dapat ditemukan di sini dan rincian implementasi pertama dapat ditemukan di sini .

MDG telah menghasilkan tulang awal dokumentasi panduan untuk pengujian yang dapat ditemukan di sini , dan ada beberapa contoh pengujian di sini .

Ini adalah contoh tes publikasi dari tautan di atas:

  it('sends all todos for a public list when logged in', (done) => {
    const collector = new PublicationCollector({userId});
    collector.collect('Todos.inList', publicList._id, (collections) => {
      chai.assert.equal(collections.Todos.length, 3);
      done();
    });
  });
tomRedox
sumber
4

Saya melakukan tes fungsional / integrasi dengan Meteor + Mocha di browser. Saya memiliki sesuatu di sepanjang baris berikut (dalam coffeescript untuk keterbacaan yang lebih baik):

Pada klien ...

Meteor.startup ->
    Meteor.call 'shouldTest', (err, shouldTest) ->
        if err? then throw err
        if shouldTest then runTests()

# Dynamically load and run mocha. I factored this out in a separate method so
# that I can (re-)run the tests from the console whenever I like.
# NB: This assumes that you have your mocha/chai scripts in .../public/mocha.
# You can point to a CDN, too.
runTests = ->
    $('head').append('<link href="https://stackoverflow.com/mocha/mocha.css" rel="stylesheet" />')
    $.getScript '/mocha/mocha.js', ->
      $.getScript '/mocha/chai.js', ->
        $('body').append('<div id="mocha"> </div>')
        chai.should() # ... or assert or explain ...
        mocha.setup 'bdd'
        loadSpecs() # This function contains your actual describe(), etc. calls.
        mocha.run()

... dan di server:

Meteor.methods 'shouldTest': -> true unless Meteor.settings.noTests  # ... or whatever.

Tentu saja Anda bisa melakukan sisi klien Anda pengujian unit dengan cara yang sama. Untuk pengujian integrasi, sebaiknya Anda memiliki semua infrastruktur Meteor.

jerico
sumber
BTW: Solusi untuk menunggu elemen DOM ini berguna saat melakukan tes fungsional di klien Meteor dengan jQuery.
jerico
2

Opsi lain, yang tersedia dengan mudah sejak 0.6.0, adalah menjalankan seluruh aplikasi Anda dari paket pintar lokal, dengan jumlah kode minimum di luar paket untuk mem-boot aplikasi Anda (mungkin memanggil paket pintar tertentu yang merupakan dasar dari aplikasi).

Anda kemudian dapat memanfaatkan Meteor's Tinytest, yang bagus untuk menguji aplikasi Meteor.

matb33
sumber
0

Saya telah berhasil menggunakan xolvio: mentimun dan kecepatan untuk melakukan pengujian saya. Bekerja dengan sangat baik dan terus berjalan sehingga Anda selalu dapat melihat bahwa pengujian Anda berhasil.

Philip Beadle
sumber
0

Meteor + TheIntern

Entah bagaimana saya berhasil menguji aplikasi Meteor dengan TheIntern.js.

Padahal itu sesuai kebutuhan saya. Tapi tetap saja saya pikir itu mungkin membawa seseorang ke arah yang benar dan saya membagikan apa yang telah saya lakukan untuk menyelesaikan masalah ini.

Ada sebuah executefungsi yang memungkinkan kita untuk menjalankan kode JS yang mana kita dapat mengakses windowobjek browser dan Meteorjuga.

Ingin tahu lebih banyak tentang eksekusi

Ini adalah bagaimana saya test suitemencari Pengujian Fungsional

define(function (require) {
    var registerSuite = require('intern!object');
    var assert = require('intern/chai!assert');
    registerSuite({
        name: 'index',

        'greeting form': function () {
            var rem = this.remote;
            return this.remote
                .get(require.toUrl('localhost:3000'))
                .setFindTimeout(5000)
                .execute(function() {
                        console.log("browser window object", window)
                        return Products.find({}).fetch().length
                    })
                .then(function (text) {
                    console.log(text)
                    assert.strictEqual(text, 2,
                        'Yes I can access Meteor and its Collections');
                });
        }
    });
});

Untuk mengetahui lebih banyak, inilah inti saya

Catatan: Saya masih dalam fase sangat awal dengan solusi ini. Saya tidak tahu apakah saya dapat melakukan pengujian rumit dengan ini atau tidak. Tapi saya cukup yakin tentang itu.

Harpreet Singh
sumber
0

Kecepatan belum matang. Saya menghadapi masalah setTimeout untuk menggunakan kecepatan. Untuk pengujian unit sisi server, Anda dapat menggunakan paket ini .

Ini lebih cepat dari kecepatan. Velocity membutuhkan waktu yang lama ketika saya menguji spesifikasi apa pun dengan login. Dengan kode Jasmine kita dapat menguji metode dan publikasi sisi server apa pun.

Zahed
sumber