Meteor testi odaklı geliştirme [kapalı]


120

Meteorda test güdümlü geliştirme nasıl yapılır bilmiyorum.

Belgelerde veya SSS'de herhangi bir yerde bahsedildiğini görmüyorum. Ben herhangi bir örnek veya benzeri bir şey görmüyorum.

Bazı paketlerin Tinytest kullandığını görüyorum.

Geliştiricilerden yanıt almam gerekir, bununla ilgili yol haritası nedir? Şu çizgide bir şey:

  • mümkün, belge yok, kendin çöz
  • meteor, test edilebilir uygulamalar yapabileceğiniz şekilde inşa edilmemiştir
  • bu planlanmış bir özellik
  • vb

4
xolv.io bloguna bir göz attığınızda , aşağıda belirtildiği gibi, Meteor kullanarak uygun Birim + Uçtan-uca TDD yapmanın örnekleri vardır.
Xolv.io

Sorunuzun tonundan, Meteor'dan oldukça fazla şeyin eksik olduğu izlenimine sahipmişsiniz gibi geliyor. Bir bakıma, atmosfer.meteor.com, mevcut JS kitaplıklarını kullanıma hazır bir biçimde bir araya getirerek aklınıza gelebilecek çoğu şeyi yapacak paketlere sahiptir. Meteor.com, IMHO'da daha yoğun bir şekilde bağlantılı olabilir.
pipedreambomb


1
Meteor testi şu anda bir karmaşa. Güncellemeler için trello.com/c/BQ3gu0no/12-official-testing-framework adresine bakın .
Andrew Mao

Yanıtlar:


83

Güncelleme 3 : Meteor 1.3'ten itibaren, meteor birim, entegrasyon, kabul ve yük testi için adım adım talimatlar içeren bir test kılavuzu içerir .

Güncelleme 2 : 9 Kasım 2015 itibariyle, Hız artık korunmamaktadır . Xolv.io, çabalarını Şempanze üzerine odaklıyor ve Meteor Geliştirme Grubu'nun resmi bir test çerçevesi seçmesi gerekiyor .

Güncelleme : Hız , Meteor'un 0.8.1 itibariyle resmi test çözümüdür .


Şu anda Meteor ile otomatik testler hakkında pek bir şey yazılmadı. Meteor topluluğunun resmi belgelerde herhangi bir şey belirlemeden önce en iyi test uygulamalarını geliştirmesini bekliyorum. Sonuçta, Meteor bu hafta 0,5'e ulaştı ve işler hala hızla değişiyor.

İyi haber: Node.js test araçlarını Meteor ile kullanabilirsiniz .

Meteor projem için, birim testlerimi iddialar için Chai kullanarak Mocha ile çalıştırıyorum . Chai'nin tam özellik setine ihtiyacınız yoksa bunun yerine should.js kullanmanızı öneririm . Şu anda sadece birim testlerim var, ancak Mocha ile entegrasyon testleri de yazabilirsiniz.

Meteor'un testlerinizi gerçekleştirmeye çalışmaması için testlerinizi "testler" klasörüne yerleştirdiğinizden emin olun .

Mocha, Meteor projeleri için kodlama dili seçimim olan CoffeeScript'i destekliyor . İşte Mocha testlerinizi çalıştırmak için görevler içeren örnek bir Cakefile . JS'yi Meteor ile kullanıyorsanız, komutları bir Makefile için uyarlamaktan çekinmeyin.

Meteor modellerinizin kendilerini Mocha'ya göstermek için biraz modifikasyona ihtiyacı olacak ve bu, Node.js'nin nasıl çalıştığına dair biraz bilgi gerektirir. Her Node.js dosyasının kendi kapsamında yürütüldüğünü düşünün. Meteor, farklı dosyalardaki nesneleri otomatik olarak birbirine maruz bırakır, ancak Mocha gibi sıradan Node uygulamaları bunu yapmaz. Modellerimizi Mocha tarafından test edilebilir hale getirmek için her Meteor modelini aşağıdaki CoffeeScript modeliyle dışa aktarın :

# 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?

... ve Mocha testinizin en üstünde, test etmek istediğiniz modeli içe aktarın:

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

Bununla, Meteor projenizle birim testleri yazmaya ve çalıştırmaya başlayabilirsiniz!


2
Bunu denedim ve test edilen kodum herhangi bir Meteor.whateverişlevi kullandığında sorunlarla karşılaştım . Meteor tanımsız hatalar alıyorum. Meteor'un bunu aşmasını açıkça istemenin bir yolu var mı?
Christian Schlensker

2
Christian, cevabımda açıklanan yaklaşım şu anda eksik çünkü Meteor uygulamanızın tam bir örneğini çalıştırmıyor. Sonuç olarak, MeteorMeteor tarafından açığa çıkan herhangi bir model bağımlılığı gibi nesneye erişilemez. Bu sürecin iyileştirilmesi, uygulamanın ortamını Mocha içinde somutlaştırmayı ve Meteornesneyi testlerinize maruz bırakmayı içerecektir . Daha eksiksiz bir test çözümüne sahip olduğumda bu yanıtı güncellediğimden emin olacağım. Bu arada, sorularınız veya önerilen iyileştirmeler için lütfen benimle iletişime geçmekten çekinmeyin.
Blackcoat

@ChristianSchlensker: İstemci tarafında işlevsel / birim testi için Mocha kullanıyorsanız, Meteor nesneleriniz var demektir. Aşağıdaki cevabımdaki örnek koda bakın.
jerico

@jerico Evet, bu iyi görünüyor, sunucu tarafı sınıflarının hiçbirinde işe yaramaz. Ayrıca mocha - saatin her zaman tüm birim testinde çalışmasını seviyorum. Sunucu tarafında o kadar hızlı çalışıyorlar ki gerçekten güzel bir test geri bildirimi sağlıyor.
Christian Schlensker

1
1.3'ten itibaren test meteor için artık mevcut, bkz. guide.meteor.com
bigmadwolf

44

Merhabalar, laika - meteor için yepyeni test çerçevesi http://arunoda.github.io/laika/

Aynı anda hem sunucuyu hem de istemciyi test edebilirsiniz.

Feragatname: Laika'nın yazarıyım.


Merhaba Arunoda. Meteor için sıkı çalışmanızı takdir ediyorum. Burada StackOverflow'da, laika'nın arkasındaki kişi olduğunuzu bir sorumluluk reddi olarak belirtmelisiniz.
nalply

5
Bunu yapmanın yolu bu mu?
Arunoda Susiripala

1
İşbirliğiniz için teşekkürler.
nalply

14

Bu sorunun halihazırda yanıtlanmış olduğunun farkındayım, ancak bunun, söz konusu bağlamı sağlayan ek bir yanıt şeklinde biraz daha fazla bağlam kullanabileceğini düşünüyorum.

Hem meteor çekirdeği hem de atmosfer için bir paket uygulayarak meteor ile bazı uygulama geliştirmenin yanı sıra paket geliştirme de yapıyorum .

Görünüşe göre sorunuz aslında üç bölümden oluşan bir soru olabilir:

  1. Tüm meteor test paketi nasıl çalıştırılır?
  2. Bireysel akıllı paketler için testler nasıl yazılır ve çalıştırılır ?
  3. Kişi kendi uygulaması için nasıl test yazıp çalıştırabilir?

Ve aynı zamanda bir yerlerde bonus bir soru olabilir gibi geliyor: 4. 1, 2 ve 3 için sürekli entegrasyon nasıl uygulanabilir?

Belgelere tüm bu sorulara kesin yanıtlar almak için Naomi Seyfer (@sixolet) ile meteor çekirdeği ekibinde konuştum ve işbirliği yapmaya başladım .

Meteor çekirdeğine 1 ve 2'yi hedefleyen bir ilk çekme talebi gönderdim: https://github.com/meteor/meteor/pull/573 .

Yakın zamanda şu soruyu da yanıtlamıştım: Meteor testlerini nasıl yaparsınız?

Sanırım @ Blackcoat yukarıda kesinlikle 3 cevabını verdi.

Bonus 4'e gelince , en azından kendi uygulamalarınız için sürekli entegrasyon yapmak için circleci.com'u kullanmanızı öneririm . Şu anda @ Blackcoat'un tanımladığı kullanım senaryosunu destekliyorlar. @Blackcoat'ın tanımladığı gibi mocha ile birim testleri çalıştırmak için kahve komutunda yazılı testleri başarıyla aldığım bir projem var.

Meteor çekirdeği ve akıllı paketler üzerine sürekli entegrasyon için Naomi Seyfer ve ben, yakın vadede harika bir şey uygulayıp uygulamayacağımızı görmek için circleci'nin kurucusu ile sohbet ediyoruz.


12

RTD artık kullanımdan kaldırıldı ve Meteor 1.0 için resmi test çerçevesi olan Velocity ile değiştirildi. Velocity yoğun bir gelişme altında olduğu için dokümantasyon hala nispeten yenidir. Velocity Github repo , Velocity Homepage ve The Meteor Testing Manual (ücretli içerik) hakkında daha fazla bilgi bulabilirsiniz.

Sorumluluk reddi: Velocity'nin çekirdek ekip üyelerinden biriyim ve kitabın yazarıyım.


RTD, burada Meteor için tam test çerçevesi göz atın rtd.xolv.io . Jasmine / Mocha / custom'yi destekler ve hem sade JS hem de kahve ile çalışır. Birim / sunucu / istemci kapsamını birleştiren test kapsamını da içerir.

Ve burada bir örnek proje

Meteor ile birim testini burada açıklayan bir blog

Selenium WebdriverJS ve Meteor kullanan bir e2e kabul testi yaklaşımı burada

Umarım yardımcı olur. Feragatname: RTD'nin yazarıyım.


6

Bu sayfayı çok kullandım ve tüm cevapları denedim, ancak başlangıç ​​noktasından itibaren oldukça kafa karıştırıcı buldum. Herhangi bir sorun yaşadığımda, onları nasıl düzelteceğime şaşırmıştım.

Henüz tam olarak belgelenmemişse de, bu çözüme başlamak gerçekten çok basittir, bu yüzden TDD yapmak isteyen ancak JavaScript'te testin nasıl çalıştığından ve hangi kitaplıkların neye bağlandığından emin olmayan benim gibi insanlara tavsiye ederim:

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

Bilginize, her yüklendiğinde uygulamamı karıştırmasını istemediğimden, testlerin sonuçlarını çalıştırmak ve görüntülemek için bir '/ testler' rotası oluşturmak için yönlendirici Atmosfer paketini de kullanmam gerektiğini öğrendim .


1
Ayrıca kullanabilirsiniz meteor-mocha-webile mocha-phantomjsotomatikleştirmek testine ve CI için. Kullandığımız şey bu. Eksiksiz açıklama - Ben, geliştiricilerinden biriyim meteor-mocha-web.
jagill

6

Tinytest'in kullanımı hakkında, şu yararlı kaynaklara bir göz atmak isteyebilirsiniz:

  1. Temel bilgiler bu ekran yayınında açıklanmıştır: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. Fikri anladıktan sonra, için genel API belgelerini isteyeceksiniz tinytest. Şimdilik, bunun için tek belge tinytestpaketin kaynağının sonunda : https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. Ayrıca, ekran video kaydında bahsediyor test-helpers, buradaki mevcut tüm yardımcılara bir göz atmak isteyebilirsiniz: https://github.com/meteor/meteor/tree/devel/packages/test-helpers Genellikle her birinin içinde bazı belgeler vardır dosya

  4. Meteor paketlerinin mevcut testlerini araştırmak birçok örnek sağlayacaktır. Bunu yapmanın bir yolu, meteor kaynak kodunun paket dizininde Tinytest.veya test.içinde arama yapmaktır.


5

Test, önümüzdeki 1.3 sürümünde Meteor'un temel bir parçası haline geliyor. İlk çözüm Mocha ve Chai'ye dayanıyor.

Minimum uygulanabilir tasarımın orijinal tartışmaları burada bulunabilir ve ilk uygulamanın ayrıntıları burada bulunabilir .

BKH testleri için kılavuz belgelerin ilk kemiklerini ürettiler burada bulunabilir ve orada burada bazı örnek testleri .

Bu, yukarıdaki bağlantıdan bir yayın testi örneğidir:

  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();
    });
  });

4

Tarayıcıda Meteor + Mocha ile fonksiyonel / entegrasyon testleri yapıyorum . Aşağıdakilere benzer bir şeyim var (daha iyi okunabilirlik için kahve kitabında):

Müşteride ...

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()

... ve sunucuda:

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

Elbette istemci tarafı birim testlerinizi de aynı şekilde yapabilirsiniz. Entegrasyon testi için tüm Meteor altyapısının etrafta olması güzel.


BTW: DOM öğelerini beklemeye yönelik bu çözüm , Meteor istemcisinde jQuery ile işlevsel testler yaparken kullanışlıdır.
jerico


2

0.6.0'dan bu yana kolayca kullanılabilir hale getirilen bir başka seçenek, uygulamanızı başlatmak için paketlerin dışında minimum miktarda kodla tüm uygulamanızı yerel akıllı paketlerden çalıştırmaktır (muhtemelen paketinizin temelini oluşturan belirli bir akıllı paketi çağırarak). Uygulama).

Daha sonra Meteor uygulamalarını test etmek için harika olan Meteor'un Tinytest'inden yararlanabilirsiniz.


0

Testlerimi yapmak için başarıyla xolvio: salatalık ve hız kullanıyorum. Gerçekten iyi çalışır ve sürekli çalışır, böylece testlerinizin başarılı olduğunu her zaman görebilirsiniz.


0

Meteor + TheIntern

Bir şekilde Meteor uygulamasını TheIntern.js ile test etmeyi başardım.

Gerçi ihtiyacım olduğu gibi. Ancak yine de birisini doğru yöne götüreceğini düşünüyorum ve bu sorunu çözmek için yaptıklarımı paylaşıyorum.

executeTarayıcı windownesnesine ve dolayısıyla Meteorda erişebileceğimiz JS kodunu çalıştırmamızı sağlayan bir işlev var .

Daha hakkında bilmek ister yürütmek

Fonksiyonel Testtest suite için böyle görünüyor

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');
                });
        }
    });
});

Daha fazlasını bilmek, bu benim özüm

Not: Bu çözümle ilgili hala çok erken aşamadayım. Bununla karmaşık testler yapıp yapamayacağımı bilmiyorum. Ama bundan oldukça eminim.


0

Hız henüz olgun değil. Hızı kullanmak için setTimeout sorunlarıyla karşılaşıyorum. Sunucu tarafı birim testi için bu paketi kullanabilirsiniz .

Hızdan daha hızlıdır. Bir oturum açma ile herhangi bir özelliği test ettiğimde hız çok fazla zaman gerektirir. Jasmine kodu ile herhangi bir sunucu tarafı yöntemi ve yayını test edebiliriz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.