Mocha ile kod kapsamı


288

Mocha'yı NodeJS uygulamamı test etmek için kullanıyorum. Kod kapsama özelliğini nasıl kullanacağımı anlayamıyorum. Ben googling denedim ama herhangi bir uygun öğretici bulamadı. Lütfen yardım et.

Yanıtlar:


410

Kod kapsamı için ek bir kütüphaneye ihtiyacınız var ve istanbul'un ne kadar güçlü ve kolay olduğuna şaşıracaksınız . Mocha testlerinizi geçtikten sonra aşağıdakileri deneyin:

npm install nyc

Şimdi, nyc komutunu mevcut test komutunuzun önüne yerleştirin, örneğin:

{
  "scripts": {
    "test": "nyc mocha"
  }
}

30
Ve yerel olarak kurulmuş bir mocha sürümü kullanıyorsanız, deneyin istanbul cover node_modules/mocha/bin/_mocha.
Eric McCarthy

102
Ya da hem istanbul hem de mocha'yı yerel olarak yükleyin ve paketinizin komut dosyaları bölümüne ekleyin. mocha / bin / _mocha - --ui bdd -R spec -t 5000
Dan Kohn

6
Bu komutu pencerelerde çalıştırmakta zorlanıyordum, ancak mocha bininin tam yolunu belirterek işe koymayı başardım. istanbul.cmd cover C:\Users\{UserName}\AppData\Roaming\npm\node_modules\mocha\bin\_mocha
Jason Jarrett

4
$(npm bin), bin klasöründe kurallı bir kısayoldur ./node_modules/.bin/ve bin klasöründe diğer istanbul/lib/cli.jsadıdır istanbul. İşte daha kısa bir komut:$(npm bin)/istanbul cover $(npm bin)/_mocha -- --ui bdd -R spec -t 5000
Henry Blyth

19
@ Windows kullanıcıları:istanbul cover node_modules/mocha/bin/_mocha -- -R spec
Pier-Luc Gendreau

150

Şimdi ( 2020 kullanmak için) tercih edilen bir yol İstanbul onun üzerinden gerçekleştirilir "sanat komut satırı arayüzü durum" NYC .

Kurmak

İlk olarak, projenize

npm i nyc --save-dev

Ardından, npm tabanlı bir projeniz varsa, mocha testlerinizin kod kapsamını yürütmek scriptsiçin package.json dosyanızın içindeki test komut dosyasını değiştirin :

{
  "scripts": {
    "test": "nyc --reporter=text mocha"
  }
}

Çalıştırmak

Şimdi testlerinizi yapın

npm test

ve test çıkışınızdan hemen sonra konsolunuzda böyle bir tablo göreceksiniz:

İstanbul Nyc Mocha kod kapsamı

Özelleştirme

HTML raporu

Sadece kullan

nyc --reporter=html

yerine text. Şimdi içeride bir rapor üretecek ./coverage/index.html.

Rapor biçimleri

İstanbul çok çeşitli rapor formatlarını desteklemektedir. Sizin için en yararlı olanı bulmak için rapor kitaplığına bakın . --reporter=REPORTER_NAMEİstediğiniz her biçim için bir seçenek eklemeniz yeterlidir. Örneğin,

nyc --reporter=html --reporter=text

hem konsola hem de html raporuna sahip olacaksınız.

Npm testi ile kapsama alanı oluşturma

Sadece başka bir komut dosyası ekleyin package.jsonve testkomut dosyasını yalnızca test çalıştırıcınızla (örn. Mocha) bırakın :

{
  "scripts": {
    "test": "mocha",
    "test-with-coverage": "nyc --reporter=text mocha"
  }
}

Şimdi bu özel komut dosyasını çalıştırın

npm run test-with-coverage

kod kapsamı ile testler yapmak.

Kod kapsamı düşükse, sınama başarısız oluyor

Toplam kod kapsamı% 90'ın altındaysa başarısız olur:

nyc --check-coverage --lines 90 

En az bir dosyanın kod kapsamı% 90'ın altındaysa başarısız olur:

nyc --check-coverage --lines 90 --per-file

2
Bu yasemin için de mükemmel bir şekilde çalisiyor: "nyc --reporter = html yasemin"
Sandip Subedi

12
"şimdi (2017)" eklediğiniz için teşekkürler - bu hızlı hareket eden javascript dünyasında gerçekten yararlı
kamahl

2
Başkasının kafasını karıştırması durumunda - npm deposu istanbul nyc tarafından abartılı görünüyor . Onun listelenen bağımlılıkları Başına, istanbul tüm muhafaza çeşitli paketler halinde birbirinden ayrıldı istanbuljs monorepo
aaaaaa

1
Ben yaşıyorum --reporter=htmlvb tablonun sadece başlıklara kaplı kaplanmamış blokları veya yaklaşık% gösterilen şey yok, etkin ama html dosyası her zaman boş olduğunu
TGW

2
Yani ... CLI komutu NYC olan İstanbul adında bir çerçeve? hata ... Buna güvenmiyorum!
Tivie

19

Blanket.js de mükemmel çalışıyor.

npm install --save-dev blanket

testinizin önünde / tests.js

require('blanket')({
    pattern: function (filename) {
        return !/node_modules/.test(filename);
    }
});

Çalıştırmak mocha -R html-cov > coverage.html


requir ('battaniye') ({desen: işlev (dosyaadı) {dönüş! /node_modules/.test (dosyaadı);}});
jsan

4
2015 yılı itibariyle blanket.js artık korunmamaktadır ve ES6'yı desteklememektedir. İstanbul şiddetle tavsiye edilir.
teroi
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.