Tek bir test dosyası çalıştırma


139

ng testTüm test paketi yerine tek bir dosya için çalıştırmanın bir yolu var mı ? İdeal olarak, bir dosyayı düzenlerken mümkün olan en hızlı geri bildirim döngüsünü elde etmek isterim, ancak karmaher kayıtta tüm paketi çalıştırır, bu yeterince büyük bir test paketi oluşturduğunuzda biraz yavaştır.


Bu, angular-cli ile yalnızca bir test spesifikasyonunun nasıl yürütüleceğinden farklıdır, bu soru tek bir spesifikasyonu çalıştırmakla ilgilidir. Bu, tek bir dosyanın çalıştırılmasıyla ilgilidir. Çözüm, aynı Jasmine spec özelliğini içerir, ancak sorunun doğası biraz farklıdır.




Yanıtlar:


263

Jasmine'in (odak için mi?) Önek describeve ityöntemler kullanmanıza izin verdiğini keşfettim f. Yani fdescribeve fit. Bunlardan herhangi birini kullanırsanız, karma yalnızca ilgili testleri çalıştıracaktır. Yani, mevcut dosyaya odaklanmak için, sadece en üst seviyeyi alabilir describeve olarak değiştirebilirsiniz fdescribe. Benim amaçlarım için çalışıyor.


9
efsanevi cevap
danday74

2
Bu kadar önemli işlevselliğin daha açık ve anlaşılır olmadığına inanamıyorum.
Ash

10
çalışır, ancak ideal değildir çünkü kaynak kodunu değiştirmeniz gerekir ve sonunda değiştirilen kodu kaynak kontrolünde kontrol edebilirsiniz.
Marco Altieri

4
Lütfen mümkün olduğunda resmi belgelere bağlantılar ekleyin
jgpATs2w

Bunu araştırıyordum, Awesome
Carlos E

26

xdescribeVe tarafından yorum yapmadan belirli bir testi devre dışı bırakabileceğinizi belirtmekte fayda var.xit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

Ve birisinin daha önce söylediği gibi, bir teste odaklanmak istiyorsanız o zaman fdescribevefit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

Bu, bu günlerde includeseçenek aracılığıyla elde edilebilir . https://angular.io/cli/test#options

Bu bir küresel eşleşme, örnek olarak:

ng test --include='**/someFolder/*.spec.ts'

Ben bulamıyorum 8.1.0 sürüm notları , ancak bu cli sürümünden sonra bir özelliktir altında @Swoox bahseder 8.1.0. Bunu anladığın için teşekkürler.


1
Bu yeni bir güncelleme gibi görünüyor. Hangi sürüme ihtiyaç duyulduğunu eklemek isteyebilirsiniz. CLI 8.1 gereklidir.
Swoox

V9.1

2
Bunu CLI v9.1.0'da test ettim ve mükemmel çalışıyor.
Sajjan Singh

9

Tek bir dosya için, belirli bir dizin için veya bir grup dosya için test çalıştırabilmek için kullanabileceğiniz ng testek bir seçeneğe --includesahip olduğunu buldum :

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli dokümanları


Açısal 9 - kaldırılmış gibi görünüyor
rmcsharry

Hayır, hala NG 9'da mevcut
tephyr

6

src/test.tsAşağıdaki satıra gidebilir ve değiştirebilirsiniz:

const context = require.context('./', true, /\.spec\.ts$/);

için

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

görüntü açıklamasını buraya girin


1
Açıkçası, bunun nasıl yapılacağına dair çoğu soru fit ve fdescribe kullanarak sorunu çözmüş olsa da, bu kulağa en doğru cevap gibi geliyor. Karma'da bunu daha kolay başarmak için git sorunu var: github.com/karma-runner/karma/issues/1507 . İdeal olarak, basit olmasa da, bir testte değişiklik yapabilmek için Karma'yı yapılandırabiliriz ve ardından güncelleme ile yeniden çalıştırmak için tarayıcıda üzerine tıklamanız yeterlidir.
kabakthehead



0

Gitmeniz gerekir src/test.tsve aşağıdaki satır numarası 18 kodunu değiştirebilirsiniz:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

için

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

görüntü açıklamasını buraya girin


-3

Spesifikasyon dosyanızı parametre olarak belirtirseniz çalışır.

Örneğin:

ng testi foo.spec.ts

Bu yardımcı olur umarım.


4
Hangi sürümü kullandığınızı belirtebilir misiniz? 1.7.x ile çalışmıyor
FrEaKmAn

4
Benim için de işe yaramadı. Ama onu, spec dosyasına giden yoldan önce --main seçeneğiyle çalışacak şekilde değiştirdim. Eğik çizgilerle mutlak bir yol kullandım. Göreceli bir yol denemedim. Açısal 6 Kullanımı En iyi çözüm olup olmadığından emin değilim, ama benim için çalışıyor gibi görünüyor.
user2367418
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.