TDD için JavaScript birim test araçları


716

Birçok JavaScript birim testini ve test aracını inceledim ve düşündüm, ancak tamamen TDD uyumlu kalmak için uygun bir seçenek bulamadım. Peki, tamamen TDD uyumlu bir JavaScript birim test aracı var mı?

Yanıtlar:


1506

Karma veya İletki

Karma, Node.js ile oluşturulmuş ve birim testi için tasarlanmış bir JavaScript test çalıştırıcısıdır.

İletki uçtan uca test içindir ve testleri yürütmek için Selenium Web Sürücüsünü kullanır.

Her ikisi de Açısal ekip tarafından yapılmıştır. İstediğiniz herhangi bir iddia kitaplığını da kullanabilirsiniz.

Screencast: Karma Başlarken

ilgili :

artıları :

  • Win / OS X / Linux ile çok uyumlu olan node.js kullanır
  • PhantomJS ile testleri tarayıcıdan veya başsız yapın
  • Aynı anda birden fazla istemcide çalıştırın
  • Tarayıcıları başlatma, yakalama ve otomatik olarak kapatma seçeneği
  • Sunucu / istemcileri geliştirme bilgisayarında veya ayrı olarak çalıştırma seçeneği
  • Testleri bir komut satırından çalıştırın (ant / maven içine entegre edilebilir)
  • Yazma testleri xUnit veya BDD stili
  • Birden çok JavaScript test çerçevesini destekler
  • Kaydetme sırasında otomatik çalıştırma testleri
  • Proxy istek alanları arası
  • Özelleştirmek mümkün:
    • Diğer test çerçevelerini sarmak için uzatın (Jasmine, Mocha, dahili QUnit)
    • Kendi iddialarınız / yalanlarınız
    • Muhabirler
    • Tarayıcı Başlatıcılar
  • WebStorm Eklentisi
  • Netbeans IDE tarafından desteklenmektedir

Eksileri :

mocha.js

Mocha.js'nin özellikleri, güçlü ve zayıf yönleri hakkında yorum yapmak için tamamen niteliksizim, ancak bana sadece JS topluluğuna güvendiğim biri tarafından önerildi.

Web sitesinde bildirildiği gibi özelliklerin listesi:

  • tarayıcı desteği
  • vaatler dahil basit zaman uyumsuz destek
  • test kapsamı raporlaması
  • string diff desteği
  • javascript # Testleri çalıştırmak için API
  • CI desteği vb. için uygun çıkış durumu
  • tty olmayanlar için renklendirmeyi otomatik olarak algılar ve devre dışı bırakır
  • yakalanmayan istisnaları doğru test senaryosuyla eşler
  • zaman uyumsuz test zaman aşımı desteği
  • teste özel zaman aşımları
  • hırıltı bildirimi desteği
  • test sürelerini rapor eder
  • yavaş testleri vurgular
  • dosya izleyici desteği
  • küresel değişken kaçak tespiti
  • isteğe bağlı olarak normal ifadeyle eşleşen testleri çalıştırın
  • etkin döngü ile "askıda kalmayı" önlemek için otomatik çıkış
  • süitleri ve test senaryolarını kolayca meta-oluştur
  • mocha.opts dosya desteği
  • test yürütmesini filtrelemek için tıklanabilir paket başlıkları
  • düğüm hata ayıklayıcı desteği
  • yapılan birden fazla çağrıyı algılar ()
  • istediğiniz herhangi bir iddia kütüphanesini kullanın
  • 9'dan fazla muhabirle birlikte genişletilebilir raporlama
  • genişletilebilir test DSL'leri veya "arayüzler"
  • önce, sonra, her önce, her kancadan sonra
  • keyfi transpiler desteği (kahve komut dosyası vb.)
  • TextMate paketi

yolpo

yolpo

Bu artık mevcut değil, bunun yerine sequential.js adresine yönlendiriyor

Yolpo, javascript yürütme görselleştirmek için bir araçtır. Javascript API geliştiricileri, API'larını göstermek ve anlatmak için kullanım durumlarını yazmaya teşvik edilir. Bu tür kullanım durumları regresyon testlerinin temelini oluşturur.

AVA

AVA logosu

ES2015 için yerleşik desteğe sahip fütüristik test koşucusu. JavaScript tek iş parçacıklı olmasına rağmen, Node.js'deki IO, eşzamansız yapısı nedeniyle paralel olarak gerçekleşebilir. AVA bundan yararlanır ve testlerinizi eş zamanlı olarak yürütür, bu da özellikle ağır ağır testler için faydalıdır. Ayrıca, test dosyaları ayrı işlemler olarak paralel olarak çalıştırılır, böylece her test dosyası için daha iyi performans ve yalıtılmış bir ortam sağlanır.

  • Minimum ve hızlı
  • Basit test sözdizimi
  • Testleri aynı anda çalıştırır
  • Atomik testler yazmayı zorlar
  • Örtük globaller yok
  • Her test dosyası için yalıtılmış ortam
  • Testlerinizi ES2015'e yazın
  • Söz desteği
  • Jeneratör fonksiyon desteği
  • Zaman uyumsuz işlev desteği
  • Gözlenebilir destek
  • Gelişmiş öneriler
  • İsteğe bağlı TAP çıkışı
  • Yığın izlerini temizleme

Buster.js

Node.js ile oluşturulmuş bir JavaScript test çalıştırıcısı. Çok modüler ve esnektir. Kendi iddialı kütüphanesi ile birlikte gelir, ancak isterseniz kendi kütüphanenizi de ekleyebilirsiniz. İddialar kütüphane aynı zamanda diğer test koşucular ile kullanabilirsiniz böylece, koparılmış olmaktadır. assert(!...)Veya yerine kullanmak expect(...).not..., refute(...)hangi güzel bir bükülme imho kullanır .

Bir tarayıcı JavaScript test araç takımı. Tarayıcı otomasyonu (düşünüyorum JsTestDriver), QUnit tarzı statik HTML sayfa testi, başsız tarayıcılarda test (PhantomJS, jsdom, ...) ve daha fazlası ile tarayıcı testi yapar. Bir göz atın bakış !

Bir Node.js test araç takımı. Aynı test senaryosu kütüphanesini, onaylama kütüphanesini vb. Alırsınız. Bu, karma tarayıcı ve Node.js kodu için de harika. Test vakanızı Buster.JS ile yazın ve hem Node.js'de hem de gerçek bir tarayıcıda çalıştırın.

Screencast: Buster.js Başlarken (2:45)

artıları :

  • Win / OS X / Linux ile çok uyumlu olan node.js kullanır
  • PhantomJS ile bir tarayıcıdan veya başsız testler yapın (yakında)
  • Aynı anda birden fazla istemcide çalıştırın
  • NodeJS testini destekler
  • Geliştirme bilgisayarında sunucu / istemci çalıştırmanıza gerek yok (IE'ye gerek yok)
  • Testleri bir komut satırından çalıştırın (ant / maven içine entegre edilebilir)
  • Yazma testleri xUnit veya BDD stili
  • Birden çok JavaScript test çerçevesini destekler
  • Testleri yorumlamak yerine erteleyin
  • SinonJS yerleşik
  • Kaydetme sırasında otomatik çalıştırma testleri
  • Proxy istek alanları arası
  • Özelleştirmek mümkün:
    • Diğer test çerçevelerini sarmak için uzatın (yerleşik JsTestDriver)
    • Kendi iddialarınız / yalanlarınız
    • Muhabirler (xUnit XML, geleneksel noktalar, özellikler, hafifçe vurma, TeamCity ve daha fazlası yerleşik)
    • Tarayıcı testlerini çalıştırmak için kullanılan HTML'yi özelleştirin / değiştirin
  • TextMate ve Emacs entegrasyonu

Eksileri :

  • Beta tarzında buggy olabilir
  • Eclipse / IntelliJ için eklenti yok (henüz)
  • Sonuçları os / tarayıcı / TestSwarm * gibi sürüme göre gruplandırmaz. Bununla birlikte, test sonuçlarında tarayıcı adını ve sürümünü yazdırır.
  • TestSwarm * gibi önceki test sonuçlarının geçmişi yok
  • Mayıs 2014 itibariyle pencerelerde tam olarak çalışmıyor

* TestSwarm aynı zamanda bir Sürekli Entegrasyon sunucusudur, Buster.js için ayrı bir CI sunucusuna ihtiyacınız vardır. Bununla birlikte, xUnit XML raporları çıkarır, bu nedenle Hudson , Bamboo veya diğer CI sunucularıyla entegre edilmesi kolay olmalıdır .

TestSwarm

https://github.com/jquery/testswarm

TestSwarm, GitHub web sayfalarında belirtildiği gibi artık aktif olarak geliştirilmiyor. Karma, tarayıcı-koşucusu veya Stajyer'i öneriyorlar.

Yasemin

Yasemin

Bu, Ruby veya Ruby on Rails hakkında bilgi sahibi geliştiricilerin ilgisini çekebilecek davranışa dayalı bir çerçevedir (aşağıda alıntıda belirtildiği gibi). Sözdizimi, Rails projelerinde test etmek için kullanılan RSpec'i temel alır .

Yasemin özellikleri bir html sayfasından (qUnit tarzında) veya bir test koşucusundan (Karma olarak) çalıştırılabilir.

Jasmine, JavaScript kodunuzu test etmek için davranış odaklı bir geliştirme çerçevesidir. Başka hiçbir JavaScript çerçevesine bağlı değildir. Bir DOM gerektirmez.

Bu test çerçevesi ile ilgili deneyiminiz varsa, lütfen daha fazla bilgi ile katkıda bulunun :)

Proje ana sayfası: http://jasmine.github.io/

QUnit

QUnit, geliştiriciye mümkün olduğunca çok kolaylık sağlarken, JavaScript'i tarayıcıda test etmeye odaklanır. Siteden Blurb:

QUnit güçlü, kullanımı kolay bir JavaScript birim test paketidir. JQuery, jQuery UI ve jQuery Mobile projeleri tarafından kullanılır ve herhangi bir genel JavaScript kodunu test edebilir

QUnit, TestSwarm ile bazı geçmişleri paylaşır (yukarıda):

QUnit ilk olarak jQuery'nin bir parçası olarak John Resig tarafından geliştirilmiştir. 2008 yılında kendi ev, isim ve API belgelerine sahipti ve başkalarının da birim testleri için kullanmasına izin verdi. O zaman hala jQuery'ye bağlıydı. 2009'da yeniden yazma işlemi, QUnit'in tamamen bağımsız çalıştığını düzeltti. QUnit'in onaylama yöntemleri, bir dereceye kadar QUnit'ten etkilenen CommonJS Birim Testi spesifikasyonunu takip eder.

Proje ana sayfası: http://qunitjs.com/

sinon

Başka bir harika araç da Test-Driven JavaScript Development'in yazarı Christian Johansen tarafından sinon.js'dir . En iyi tarif edilen:

JavaScript için bağımsız test casusları, taslakları ve alayları. Hiçbir bağımlılık herhangi bir birim test çerçevesi ile çalışmaz.

Stajyer

Stajyer Web sitesi bu listedeki diğer test çerçeveler doğrudan özellik karşılaştırma sağlar. Kullanıma hazır diğer JavaScript tabanlı test sistemlerinden daha fazla özellik sunar.

JEST

Yeni ama çok güçlü bir test çerçevesi. Anlık görüntü tabanlı testlere izin verir, bu da test hızını artırır ve test açısından yeni bir dinamik oluşturur

Konuşmalarından birine göz atın: https://www.youtube.com/watch?v=cAKYQpTC7MA

Daha da iyisi: Başlarken


2
Jasmine V8 kullanarak başsız çalışabilir, ancak etkileşimli olarak da kullanabilirsiniz. DOM, Jasmine için gerekli olmasa da , kod tabanınız DOM'a erişebilir. Disiplin ile kodun DOM'a erişen ve HTML armatürlerinden tamamen ayrı testler gerçekleştiren bölümlerini ortadan kaldırmak, koşullarla korumak veya alay sağlamak mümkündür. Eklentileri kullanarak komut satırı desteği ve fikstürleri de alabilirsiniz.
jerseyboy

2
@ rehevkor5: Selenyum entegrasyon testi için, buradaki araçlar birim test için. typemock.com/unit-tests-integration-tests
gregers

26
Hemen hemen her test koşucusu bir tarayıcıya güvenir. Wtf, hiç kimse sadece sunucu tarafında birim testleri çalıştırmıyor mu ????

2
Her alternatifi farklı cevaplarda bölmek / bölmek daha iyi olmaz mıydı? Bu konudaki mevcut oyları geçersiz kılabilir, ama bence en mantıklı.
cregox

2
@Raisen ES 2015'i Babel ile çoğuna takabilirsiniz , ancak AVA tarafından Sindre Sorhus yerleşiktir.
gregers

64

JavaScript birim testi için neredeyse çerçeveden bağımsız bir koşum olan ve herhangi bir Dojo bağımlılığı olmayan Dojo Nesne Kablo Demeti (DOH) birim test çerçevesine bir göz atın . Dojo Objektif Kablo Demeti'ni kullanarak Web 2.0 uygulamalarını test eden Birim'de bunun çok iyi bir açıklaması var .

UI testini otomatikleştirmek istiyorsanız (birçok geliştiricinin ağrılı noktası) - doh.robot'a (geçici olarak aşağı güncelleyin: diğer bağlantı http://dojotoolkit.org/reference-guide/util/dohrobot.html ) ve dijit .robotx (geçici olarak kapalı) . İkincisi bir kabul testi için tasarlanmıştır. Güncelleme:

Referans verilen makaleler, bunların nasıl kullanılacağını, fare ve / veya klavyeyi kullanarak kullanıcı arayüzünüzle etkileşime giren bir kullanıcının nasıl taklit edileceğini ve bir test oturumunun nasıl kaydedileceğini açıklar, böylece daha sonra otomatik olarak "oynatabilirsiniz".


Dojo Nesne Demeti'nin önerisi için teşekkürler, bunu asla bulamazdım. Diğer önerileri takdir ediyorum - ama her seferinde bir adım.
Mark Levison

Bunu daha önceki bir projede kullandım ve çok değerli buldum. Ama sonra tekrar karşılaştıramam - başka bir TDD çerçevesi kullanmadım.
Rakesh Pai

Ölü bağlantıları bildirdiğiniz için teşekkür ederiz. Bunlardan birini güncelledim ve yeni bir web sitesinde hazır olur olmaz robot belgelerine olan bağlantıları değiştireceğim.
Eugene Lazutkin

DOH hakkında sevmediğim bir şey, iddialar başarısız olduğunda satır numaralarının bildirilmemesidir. Bunları manuel olarak yorumlamak ve testi yeniden çalıştırmak çalışır.
Aram Kocharyan

Dojo, DOH'u TheIntern test çerçevesiyle değiştiriyor. Stajyer çok güçlü ve önemli gelişmeler var. sitepen.com/blog/2014/02/18/…
user64141

34

Chutzpah - Bir JavaScript Test Çalıştırıcısı

JavaScript birim testleri için bir test koşucusu olan Chutzpah adlı açık kaynaklı bir proje oluşturdum. Chutzpah, JavaScript birim testlerini komut satırından ve Visual Studio içinden çalıştırmanızı sağlar. Ayrıca TeamCity sürekli entegrasyon sunucusunda çalışmayı da destekler.


7
Chutzpah'ı Jasmine testlerini görsel stüdyoda çalıştırmak için yeni kullanmaya başladım - güzel bir şekilde entegre edildi: test dosyasına sağ tıklayın ve 'js testlerini çalıştır' veya 'JS testlerini tarayıcıda çalıştır'ı seçti. Aynı yasemin testlerini JSTestDriver kullanarak çalıştırıyorum. Chutzpah'ı tercih ediyorum çünkü hangi dosyanın test dosyasının üst kısmına yüklenmesine bağlı olduğumu belirtiyorum. JSTestDriver için ayrı bir yapılandırma dosyasına ihtiyacım var.
GarethOwen


14

BusterJS

Test Tahrikli Javascript Geliştirme ve Sinon çerçevesinin yazarı Christian Johansen'den BusterJS de var . Siteden:

Buster.JS yeni bir JavaScript test çerçevesidir. Node.js testinin yanı sıra gerçek tarayıcılardaki test çalışmalarını (JsTestDriver'ı düşünün) otomatikleştirerek tarayıcı testi yapar.


10

hakkında-JS-testi:

Google tarafından yayınlanan JavaScript test çerçevesi: https://github.com/google/gjstest

  • Bir tarayıcı çalıştırmak zorunda kalmadan son derece hızlı test başlatma ve yürütme süresi.
  • Hem başarılı hem de başarısız testlerde temiz, okunabilir çıktı.
  • Bir tarayıcı tabanlı bir test atlet JS her değiştiğinde sadece yenilenebilir.
  • C ++ için Google Testine benzeyen stil ve anlambilim .
  • Google C ++ Alaycı Çerçevesi'ni temel alan stil ve anlambilim ile minimal bir kaynatıcı kodu (ör. Hayır $tearDownveya $verifyAll) gerektiren yerleşik bir alaycı çerçeve .

Şu anda Windows için ikili dosya yok


1
Github'a neredeyse sıfır ilgi var gibi görünüyor, ayrıca unix-base OS gerektiriyor ve ben büyük bir windows hayranıyım, windows makine elveda öpüşmeden evimi terk etmiyorum.
vsync

8

Şimdi Qunit'i Pavlov ve JSTestDriver ile birlikte kullanıyoruz. Bu yaklaşım bizim için iyi işliyor.

QUnit

Pavlov , kaynak

jsTestDriver , kaynak


Tüm test sürecinde bunların her birindeki rolü ve bunların birbirleriyle nasıl bağlantı kurduklarını açıklamak ister misiniz?
vsync

Maalesef, bu konudaki ayrıntıları hatırlamak uzun zaman aldı ve birçok sözleşme işi oldu.
Tom Stickel

6

Bir profesyonel olarak "gerçek tarayıcı üzerinde çalışır" var, ama benim deneyimime göre bu bir con çünkü yavaş. Ancak onu değerli kılan, tarayıcı dışı alternatiflerden yeterli JS emülasyonunun olmamasıdır. JS'niz sadece tarayıcıda bir testin yeterli olacağı kadar karmaşıksa, dikkate alınması gereken birkaç seçenek daha olabilir:

HtmlUnit : "Oldukça iyi bir JavaScript desteğine sahiptir (sürekli olarak gelişmektedir) ve kullanmak istediğiniz yapılandırmaya bağlı olarak Firefox veya Internet Explorer'ı simüle ederek oldukça karmaşık AJAX kütüphaneleriyle bile çalışabilir." Emülasyonu kullanımınız için yeterince iyi ise, bir tarayıcı sürmekten çok daha hızlı olacaktır.

Ama belki HtmlUnit yeterince iyi JS desteği var ama Java sevmiyorsun? O zaman belki:

Hız : HtmlUnit tarafından desteklenen JRuby üzerinde çalışan Watir API.

veya benzer şekilde

Schnell : HtmlUnit'in başka bir JRuby paketleyicisi.

Tabii ki HtmlUnit yeterince iyi değilse ve bir tarayıcı kullanmanız gerekiyorsa, JS'nizi sürmek için Watir'i düşünebilirsiniz .



3

Ayrıca , Dojo, ExtJS, vb.'ye benzer açık kaynaklı bir RIA çerçevesi olan qooxdoo'nun bir parçası olan ancak oldukça kapsamlı bir araç zincirine sahip birim test çerçevesiyle de ilgilenebilirsiniz .

Test çalıştırıcının çevrimiçi sürümünü deneyin . İpucu: sol üstteki gri oka basın (daha belirgin hale getirilmelidir). Seçilen testleri çalıştıran bir "oynat" düğmesi.

Birim testlerinizi tanımlamanıza izin veren JS sınıfları hakkında daha fazla bilgi için çevrimiçi API görüntüleyicisine bakın .

Otomatik kullanıcı arayüzü testi için (Selenium RC tabanlı), Simulator projesine göz atın .



3

Javascript kod üreticisi ST-JS'ye ( http://st-js.org ) Java'mıza JUnit entegrasyonunu ekledik . Çerçeve, hem test edilen kod hem de birim testleri için karşılık gelen Javascript oluşturur ve kodu farklı tarayıcılara gönderir.

Birim test çalıştırıcısı gerekli http portunu açtığından (ve testler bittikten sonra kapattığından) ayrı bir sunucuya gerek yoktur. Çerçeve, Java yığın izlemesini değiştirerek başarısız eklerin JUnit Eclipse eklentisi tarafından doğru bir şekilde görüntülenmesini sağlar. İşte jQuery ve Mockjax ile basit bir örnek:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}

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.