Jest kullanarak nasıl tek bir test yapabilirim?


356

Fix-order-test.js dosyası içinde 'iç içe geçmiş çocuklarla çalışır' bir test var.

Aşağıdakilerin çalıştırılması dosyadaki tüm testleri çalıştırır.

jest fix-order-test

Yalnızca tek bir testi nasıl yapabilirim? Aşağıda, belirtilen normal ifadenin bir dosyasını ararken çalışmaz.

jest 'works with nested children'


jest komut satırını kullandığınızdan beri, muhtemelen npm ile o zaman sadece --testNamePattern 'works with nested children' Jest CLI Seçeneklerini
steven87vt

@BioGenX: bağlantı şimdi kesildi
Dan Dascalescu

Yanıtlar:


429

Komut satırından --testNamePatternveya -tbayrağını kullanın

jest -t 'fix-order-test'

Bu yalnızca sağladığınız test adı modeliyle eşleşen testleri çalıştırır. Bu öyle Jest docs .

Başka bir yol da testleri izleme modunda çalıştırmak jest --watchve ardından ptest dosyası adını yazarak testleri filtrelemek veya ttek bir test adı çalıştırmak için düğmesine basmaktır.


Bir varsa itbir içini describebloğu, Kaçak zorunda

jest -t '<describeString> <itString>'

-T için tanınmayan seçenekler alıyorum. Evet, belgeler bundan bahsediyor. Bayrak, 16.0'da eklendi. En son sürümdeyim. jest -help bayraktan bahsetmiyor gibi görünüyor. Teşekkürler.
vijayst

12
Bunun it(), dosya adı için değil, işlev içindeki belirli test adı için test deseni olduğunu unutmayın . Ben de öyle düşünmüştüm.
HussienK

70
Npm testi kullanılarak, yapmanız gerekennpm test -- -t "fix order test"
Saparna

3
Bu benim için işe yarıyor ama aynı zamanda büyük projeler için yavaş olan projedeki diğer tüm testleri atlıyor. Testin içinde olduğu belirli bir test dosyasını belirtmek gerçekten yardımcı olur:./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932 20

<describeString> belirten w / o ile çalışır, ben mocha'nın grep (-g 'searchString') daha yavaş büyüklükleri fark ettim - ama ben alacağım :-)
schmoopy

126

Jest belgeleri aşağıdakileri önerir:

Bir test başarısız olursa, kontrol edilecek ilk şeylerden biri, çalışan tek test olduğunda testin başarısız olup olmadığı olmalıdır. Jest'te sadece bir test yapmak kolaydır - bu test komutu geçici olarak birtest.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

veya

it.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

7
Benim için jest 20.0.4 ile çalışır. Her ne kadar bu dosyadaki testlerin geri kalanını atlasa da. Çalıştırmayı bir dosyayla daha önce kısıtlamadıysanız, diğer dosyalardaki testler çalışmaya devam eder.
Holf

7
Bu bir jest şeydir - çünkü testleri asenkron olarak çalıştırır, muhtemelen hangi testin hangi dosyada başından itibaren çalıştırılacağını belirleyemez. Böylece tüm dosyaları varsayılan olarak çalıştıracak ve İÇİNDE dosyaları kontrol edin test.only. Bu nedenle, birçok testten oluşan bir test senaryosunda birçok test senaryosu bulunan bir dosyada sadece bir test çalıştırmak istiyorsanız, maalesef tek bir dosyayı çalıştırmanız gerekirjest myTestFile.test.js
lapa lapa

@johnslay: Sadece test etti
lapa lapa

@flaky Sanırım koşarken çalışmadığını söylemek istedim npm test. Dosyayı tek başına çalıştırmanız veya pbir filtre ayarlamak için tuşuna basmanız gerekir.
johnslay

3
@johnslay iyi, cevabınızı yazmadan önce önceki yorumları okuduğunuz için teşekkürler Sanırım / s :)
flaky

55

Diğer yanıtlarda belirtildiği gibi, test.onlysadece aynı dosyadaki diğer testleri filtreler . Bu nedenle, diğer dosyalardaki testler yine de çalışır.

Tek bir test yapmak için iki yaklaşım var:

  • Seçenek 1: Test adınız benzersizse, tizleme modundayken girebilir ve çalıştırmak istediğiniz testin adını girebilirsiniz.

  • Seçenek 2:

    1. Hit pizle modunda çalıştırmak istediğiniz dosya için bir regex girmek için ise. (Jest'i izleme modunda çalıştırdığınızda bunun gibi ilgili komutlar görüntülenir).
    2. Değişim itiçin it.onlyçalıştırmak istediğiniz testi.

Yukarıdaki yaklaşımlardan herhangi birinde Jest, yalnızca belirttiğiniz dosyada tek bir testi çalıştırır.


54

Tek bir Jest testi çalıştırmak için tam komut

Komut:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>:
    • Pencereler: node_modules\jest\bin\jest.js
    • Diğerleri: node_modules/.bin/jest
  • -i <you-test-file>: testli dosyanın yolu ( jsveya ts)
  • -c <jest-config>: ayrı bir Jest yapılandırma dosyasının (JSON) yolu, Jest yapılandırmanızı tutarsanız package.jsonbu parametreyi belirtmeniz gerekmez (Jest bunu yardımınız olmadan bulur)
  • -t <the-name-of-test-block>: Aslında bir isim (ilk parametre) var describe(...), it(...)ya test(...)bloğun.

Misal:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

Yani, komut

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

test edecek it("1 + 1 = 2", ...), ancak -tparametresini olarak değiştirirseniz "math tests", her iki testi de describe("math tests",...)bloktan çalıştıracaktır .

Uyarılar:

  1. Windows için yerini node_modules/.bin/jestile node_modules\jest\bin\jest.js.
  2. Bu yaklaşım, çalışan komut dosyasında hata ayıklamanıza olanak tanır. Hata ayıklamayı etkinleştirmek '--inspect-brk'için komuta parametre ekleyin .

'Package.json' dosyasındaki NPM komut dosyaları aracılığıyla tek bir Jest testi çalıştırma

Jest'i yükledikten sonra, bu komutun sözdizimini (yukarıda) NPM komut dosyalarını kullanarak basitleştirebilirsiniz . Bölüme "package.json"yeni bir komut dosyası ekleyin "scripts":

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

Bu durumda, 'jest'tam yolunu yazmak yerine bir takma ad kullanırız. Ayrıca, yapılandırma dosyası yolunu da belirtmeyiz, çünkü bunu da yerleştirebiliriz "package.json"ve Jest varsayılan olarak içine bakar. Şimdi komutu çalıştırabilirsiniz:

npm run test:math

ve "math tests"iki test içeren blok yürütülür. Veya, elbette, adıyla belirli bir testi belirtebilirsiniz.

Başka bir seçenek de <the-name-of-test-block>parametrenin "test:math"komut dosyasının dışına çekilmesi ve NPM komutundan geçirilmesidir:

package.json:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

Komut:

npm run test:math "math tests"

Artık çalışma test (ler) inin adını çok daha kısa komutla yönetebilirsiniz.

Uyarılar:

  1. 'jest'Komut NPM komut çünkü birlikte çalışacaktır

    npm , herhangi bir yaşam döngüsü komut dosyası çalıştırırken ortam değişkenindeki "./node_modules/.bin"ilk girişi yapar PATH, bu nedenle programınız genel olarak yüklenmemiş olsa bile bu iyi çalışır ( NPM blog )

  2. Bu yaklaşım hata ayıklamaya izin vermez, çünkü Jest, ikili / CLI yoluyla değil , çalıştırılır node.

Visual Studio Code'da seçilen Jest testini çalıştırma

Visual Studio Code kullanıyorsanız bundan faydalanabilir ve F5düğmesine basarak seçili testi (kod düzenleyicide) çalıştırabilirsiniz . Bunu yapmak için dosyada yeni bir başlatma yapılandırma bloğu oluşturmamız gerekecek ".vscode/launch.json". Bu yapılandırmada, çalışırken uygun (ne yazık ki her zaman değil ) değerlerle değiştirilen önceden tanımlanmış değişkenleri kullanacağız . Mevcut olanların hepsiyle sadece aşağıdakilerle ilgileniyoruz:

  • ${relativeFile} - göre geçerli açık dosya ${workspaceFolder}
  • ${selectedText} - etkin dosyada seçili olan metin

Ancak, başlatma yapılandırmasını yazmadan önce 'test'betiği bizim dosyamıza eklemeliyiz 'package.json'.

package.json:

"scripts": {
  "test": "jest"
}

o zaman lansman konfigürasyonumuzda kullanabiliriz.

Yapılandırmayı başlat:

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

aslında bu cevapta daha önce açıklanan komutlarla aynı şeyi yapar. Artık her şey hazır olduğundan, komut parametrelerini manuel olarak yeniden yazmak zorunda kalmadan istediğimiz herhangi bir testi çalıştırabiliriz.

Tüm yapmanız gereken:

  1. Hata ayıklama panelinde şu anda oluşturulan başlatma yapılandırmasını seçin:

VSCode hata ayıklama panelinde başlat yapılandırmasını seçin

  1. Kod düzenleyicide testli dosyayı açın ve test etmek istediğiniz testin adını seçin (tırnak işaretleri olmadan):

test adını seç

  1. Düğmesine basın 'F5'.

Ve işte!

Şimdi istediğiniz herhangi bir testi çalıştırmak için düzenleyicide açın, adını seçin ve F5 tuşuna basın.

Ne yazık ki, Windows makinelerinde "voila" olmayacak, çünkü ${relativeFile}değişkenleri eğik çizgileri tersine çeviren yolla değiştiriyorlar (kim bilir) ve Jest böyle bir yolu anlayamayacaktı.

Uyarılar:

  1. Hata ayıklayıcı altında çalıştırmak için '--inspect-brk'parametre eklemeyi unutmayın .
  2. Bu yapılandırma örneğinde, içinde bulunduğu varsayılarak Jest config parametresimiz yoktur 'package.json'.

1
Mükemmel! Bu kabul edilen cevap olmalı. Özellikle npxişletim sisteminden bağımsız olarak Jest'i aramayı büyük ölçüde basitleştirmekten bahsediyorsa .
Dan Dascalescu

19

Bir testi odaklamak veya hariç tutmak için fveya xdüğmesini de kullanabilirsiniz . Örneğin

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

1
Bu cevabın neden reddedildiğinden emin değilim, soruyu cevaplıyor ve çalışıyor gibi görünüyor.
mbillard

1
xitbenim için çalıştı, ama fitolmadı. jest@22.4.4 kullanıyorum.
Hinrich

Bu yaklaşımın ana dezavantajı, bir hatayı düzeltmek için sadece bir testi incelemek istiyorsanız, temeldeki test dosyalarında gereksiz değişiklikler yapılmasını gerektirdiğini düşünüyorum. Herhangi bir nedenle, test kodunu (taahhütler arasında, örneğin) korumak istiyorsanız, bu mantıklı olabilir.
webelo

14

Yukarıda belirtildiği gibi, komutu çalıştırabilirsiniz

jest -t 'fix-order-test'

Bir varsa itbir içini describebloğu, Kaçak zorunda

jest -t '<describeString> <itString>'

13

Eğer varsa jestbir kod komutu gibi bir şey olarak çalışan npm test, o iş yapmak için aşağıdaki komutu kullanmak gerekmez:

npm test -- -t "fix order test"

8

en son jest sürümünde , test paketinde olduğu gibi yalnızca bir test çalıştırmak için aşağıdakilerden birini kullanabilirsiniz.

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' test adı benzersizse de çalışabilir.


4

VS Kodunda, bu sadece kesme noktaları ile 1 Jest testini çalıştırmamı / hata ayıklamamı sağlar: https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

Benim launch.jsoniçinde bu var:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

ve bunun içinde package.json:

  "scripts": {
    "test": "jest"
  }
  • 1 testi çalıştırmak için, bu testte, test(veya it) değerini test.only(veya it.only) olarak değiştirin. 1 test paketi (çeşitli testler) çalıştırmak için, değiştirmek describeiçin describe.only.
  • İsterseniz kesme noktalarını ayarlayın.
  • VS Kodunda, Hata Ayıklama Görünümü'ne (Shift + Cmd + D) gidin.
  • Üst taraftaki açılır menüden seçin Jest Current File.
  • Bu testi çalıştırmak için yeşil oku tıklayın.

Benim durumumda, yapılandırmanız sadece bir test çalıştırıyor (sadece. (Sadece)), ancak kesme noktalarında durmuyor :(
Tudor Leustean

JavaScript'in bir hata ayıklayıcıdaki kesme noktalarına çarpması, eşzamansız doğası nedeniyle zor olabilir. VS Kodu'nda, kesme noktalarınızı ve hata ayıklama menüsündeki komutları yerleştirdiğiniz yere kadar oynayın. Kesme noktalarını atlamaya devam ederse, bunları kodunuzda EARLIER'a yerleştirin. 1 dosya başka bir dosyadaki bir işlevi çağırırsa, o işlev çağrısına kesme noktasını yerleştirin, ardından dosyaları atlamak için çağrıyı "Adımla" yapın. Şu Hata Ayıklama komutlarıyla oynayın: "Step Over, Step Into, Step Out, Continue"
Raymond Gan

Aslında, gerek yok "scripts": { "test": "jest" }içinde package.jsonsen tam yolunu belirtilen çünkü "program"parametre launch.json.
Sergey

4

sadece küçük bir eklenti, çünkü kullanılacaksa ./node_modules/.bin/jest -i ...ya da sadece jest -i ...veyanpm test -- -i ...

  1. sadece jestglobal olarak yüklediyseniz çalışır (npm install -g jest gibi), bağımlılıkları ele almanın çok temiz bir yolu değil
  2. jest yalnızca pakete yerel olarak yüklüyse ve jest komut dosyasını npm komut dosyası sapması olmadan çağırmak istiyorsanız, npx jest -i ...=> kullanabilirsiniz ; seni yazıdan kurtarır./node_modules/.bin/...

3

İşte benim almak:

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

Notlar:

  • ./node_modules/.bin/...yerel olarak yüklenmiş paketle birlikte gelen yerel olarak yüklenmiş jest (veya mocha veya ...) ikili dosyalarına erişmek için harika bir yoldur. (evet, npm komut dosyalarınızda daha jestönce hiçbir şey yapamazsınız , ancak bu komut satırında kullanışlıdır ... ( hangi IDE'yi kullanırsanız kullanın, hata ayıklama yapılandırmanız için de iyi bir başlangıçtır ...)
  • projenizde bir dizi yapılandırma seçeneği olmayabilir. Ama eğer öyleyse (senaryolara göz atın package.json), ihtiyacınız olan şey budur.
  • --runInBand - dediğin gibi, yapılandırmanızı bilmiyorum, ancak tek bir test geliştirmeye / düzeltmeye odaklanırsanız, web çalışanları ile uğraşmak istemezsiniz ...
  • evet, dosyanıza bütün, açık yolu verebilirsiniz
  • isteğe bağlı olarak , -tbu dosyadaki tüm testleri değil, yalnızca tek bir testi (burada: adında ' show expanded' ile bir şey olan ) çalıştırmak için kullanabilirsiniz. Aynı etki .only()bu dosyaya yapıştırılarak da elde edilebilir .

0

Güzel şimdi Orada jest eklentisi olarak adlandırılan bunun için jest-watch-typeaheadbu işlem çok daha basit hale getirir.


0
npm run test -- test-name

Bu yalnızca test spesifikasyon adınız benzersizse çalışır. Yukarıdaki kod referans gösterecektir

şu ada sahip bir dosya: test-name.component.spec.ts

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.