Jasmine.js'deki bir özelliğe nasıl odaklanırım?


154

Oldukça büyük bir mimari değişimden bir sürü başarısız spesifikasyonum var. Her birini 'odak' ile etiketleyerek bunları tek tek düzeltmek için çalışmak istiyorum.

Jasmine.js'nin böyle bir özelliği var mı? Yemin ederim ki bir noktada okudum ama dokümanlarda görmüyorum.


1
@ phil-pirozhkov'un son cevabı, bunun v2.1'de Jaswine ile tanıtıldığına dikkat çekiyor
alxndr

Yanıtlar:


56

Spesifikasyon için URL'yi kullanarak tek bir spesifikasyon çalıştırabilirsiniz

describe("MySpec", function() { 
  it('function 1', function() { 
    //... 
  }) 

  it('function 2', function() { 
    //... 
  } 

}) 

Şimdi bu URL http://localhost:8888?spec=MySpecile sadece tüm spec çalıştırabilirsiniz ve bir ilk test ilehttp://localhost:8888?spec=MySpec+function+1


10
Veya sadece sonuçlar sayfasında spesifikasyonlar veya bireysel testler tıklayın
jackocnr

Muhteşem. : Şimdi, nasıl ben bunu çalıştırmak için olsun describe("MySpec", ...)değil bu bir: describe("MySpec blah blah", ...)? Bir alt dize eşleşmesi yapıyor gibi görünüyor.
Ian Phillips

Jasmine 2.0 kullanıyorsanız, diğer sürümlerden emin değilsiniz.
davidjnelson

http://localhost:8888?spec=function+1çok çalışması gerekir (genellikle MySpec belirtmeniz gerekmez)
lee penkman

123
fdescribe,fit
Basarat

269

Karma kullanırken, fitveya ile fdescribe( iitve ddescribe2.1'den önce Yasemin'de) yalnızca bir test etkinleştirebilirsiniz .


Bu yalnızca çalışır Spec1:

// or "ddescribe" in Jasmine prior 2.1
fdescribe('Spec1', function () {
    it('should do something', function () {
        // ...
    });
});

describe('Spec2', function () {
    it('should do something', function () {
        // ...
    });
});

Bu yalnızca çalışır testA:

describe('Spec1', function () {

    // or "iit" in Jasmine prior 2.1
    fit('testA', function () {
        // ...
    });

    it('testB', function () {
        // ...
    });

});

7
onun iyi bir ipucu, ama şu anda yasemin değil. buna karma gibi test koşucuları tarafından izin verilir. daha fazla bilgi için: github.com/pivotal/jasmine/pull/309
p1100i

77
Yasemin 2.1 tanıtır bu şekilde fdescribeve fit: github.com/jasmine/jasmine/commit/...
alxndr

10
II veya DD spesifikasyonlarını yerine getirmemeye dikkat etmelisiniz. Böyle bir şeyi kaçırmak kolaydır.
Rimian

@jameshfisher soru Ayrıca 2011 yılında istendi, iitve ddescribeKarma eklemeler, Jasmine vardır.
Justus Romijn

Karıştırmanın xitve fitiçine girmenin itzor ve hataya açık olduğunu düşünen tek kişi ben miyim ?
B Seven

119

Çekirdeğinde ile 2.1 yana fitve fdescribe.


1
'Fit' kullandığımda ve karma kullanarak testlerimi konsolda çalıştırdığımda çok fazla atlanmış test görebiliyorum, ancak test hatalarını görmek için yukarı kaydırmam gerekiyor. Testleri 'fit' olmadan çalıştırdığımda, altta hata özeti olduğu için böyle bir sorunum yok. Bu sorunu nasıl çözeceğinizi biliyor musunuz?
tytyryty

25

Bunun üzerine tökezleyen herkes için, kodun kendisinden ayarlayabileceğiniz daha iyi bir yaklaşım, bu eklentiyi kullanmaktır: https://github.com/davemo/jasmine-only

Spesifik münhasırlık kodunu şu şekilde ayarlamanıza izin verir:

describe.only("MySpec", function() { 
  it('function 1', function() { 
    //... 
  }) 

  it.only('function 2', function() { 
    //... 
  }
})
// This won't be run if there are specs using describe.only/ddescribe or it.only/iit
describe("Spec 2", function(){}) 

Bunun Yasemin çekirdeğine eklenmesini sağlamak için uzun bir tartışma oldu, bkz: https://github.com/pivotal/jasmine/pull/309

Jasmine'i Karma / Testacular aracılığıyla kullanıyorsanız, zaten ddescribe()veiit()


12
Ddescribe ve iit için +1 ... Bu kabul edilen cevap olmalı.
Seth Flowers

Bu en iyisidir ... Ayrıca yeni sözdiziminin fdescribeve fit- "f" nin "odaklanmış" anlamına geldiğini unutmayın . Ayrıca bkz. Jasmine.github.io/2.1/focused_specs.html
Ezekiel Victor

25

Bunu yapmanın birkaç yolu vardır.

Var: Yasemin'in Odaklı Özellikleri (2.2): http://jasmine.github.io/2.2/focused_specs.html

Odaklama özellikleri, çalışan tek özellik olmaları için bunu yapacaktır. Uyum ile bildirilen herhangi bir özellik odaklanmıştır.

describe("Focused specs", function() {
  fit("is focused and will run", function() {
    expect(true).toBeTruthy();
  });

  it('is not focused and will not run', function(){
    expect(true).toBeFalsy();
  });
});

Ancak, testlerimi (uyum ve fdescribe) seçici olarak çalıştırmak için düzenleme fikrinden gerçekten hoşlanmıyorum. Düzenli bir ifade kullanarak testleri filtreleyebilen karma gibi bir test çalıştırıcısı kullanmayı tercih ederim .

İşte homurdanan bir örnek .

$ grunt karma:dev watch --grep=mypattern

Eğer gulp kullanıyorsanız (bu benim en sevdiğim görev koşucusudur), argleri gulp-karma'ya geçirebilirsiniz Karma yapılandırma ayarlayarak yargs ve eşleşme modellerine sahip.

Bunun gibi:

var Args = function(yargs) {
  var _match = yargs.m || yargs.match;
  var _file = yargs.f || yargs.file;
  return {
    match: function() { if (_match) { return {args: ['--grep', _match]} } }
  };
}(args.argv);


var Tasks = function() {
  var test = function() {
    return gulp.src(Files.testFiles)
      .pipe(karma({ configFile: 'karma.conf.js', client: Args.match()}))
      .on('error', function(err) { throw err; });
  };

  return {
    test: function() { return test() }
  }
}(Args);

gulp.task('default', ['build'], Tasks.test);

Benim özüm bakın: https://gist.github.com/rimian/0f9b88266a0f63696f21

Şimdi açıklamayı kullanarak tek bir özellik çalıştırabilirim:

Yerel test çalıştırmam: (14'ten 1'i uygulandı (13'ü atladı))

gulp -m 'triggers the event when the API returns success'
[20:59:14] Using gulpfile ~/gulpfile.js
[20:59:14] Starting 'clean'...
[20:59:14] Finished 'clean' after 2.25 ms
[20:59:14] Starting 'build'...
[20:59:14] Finished 'build' after 17 ms
[20:59:14] Starting 'default'...
[20:59:14] Starting Karma server...
INFO [karma]: Karma v0.12.31 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
WARN [watcher]: All files matched by "/spec/karma.conf.js" were excluded.
INFO [Chrome 42.0.2311 (Mac OS X 10.10.3)]: Connected on socket hivjQFvQbPdNT5Hje2x2 with id 44705181
Chrome 42.0.2311 (Mac OS X 10.10.3): Executed 1 of 14 (skipped 13) SUCCESS (0.012 secs / 0.009 secs)
[20:59:16] Finished 'default' after 2.08 s

Ayrıca bakınız: https://github.com/karma-runner/karma-jasmine


Testleri seçici olarak çalıştırmak için homurdanma fikrinizi seviyorum, ancak gulp ve karma config'in daha esnek, genişletilmesi daha kolay ve bu konuda daha kolay anlaşılmasını diliyorum.
nocarrier

8

Tüm özelliklerinizi önceden oluşturabilir, ancak bunları test etmeye hazır olana kadar xdescribeve ile devre dışı bırakabilirsiniz xit.

describe('BuckRogers', function () {
  it('shoots aliens', function () {
    // this will be tested
  });

  xit('rescues women', function () {
    // this won't
  });
});

// this whole function will be ignored
xdescribe('Alien', function () {
  it('dies when shot', function () {
  });
});

1

Spec_runner.htlm'de bağımsız Jasmine (2.0.0) ile belirli bir spesifikasyonu tıklayabilir ve o spesifikasyona odaklanabilirim. Bu özelliği daha önce fark etmiş olmalıydım.


1

Tam olarak sorduğunuz şey değil, ekleme iityalnızca belirli özellikleri test eder ve dosyadaki diğerlerini yok sayar ddescribe, aynı şekilde çalışır. Böylece iitveya tuşlarını kullanarak belirli bir spesifikasyona odaklanabilirsiniz.ddescribe


1

Bu pratik bir örnekle en basitleştirilmiş cevaptır. Fdescribe'da bile onu kullanarak birkaç blok çalıştırabilirsiniz. f, odaklama anlamına gelir.

Ayrıca, sadece tarif edilen hiçbir fdescribe bloğunda, sadece uygun olarak işaretleyerek blokları seçebilirsiniz.

Lütfen aşağıdaki kodu çalıştırın ve konsol günlüğünü gözlemleyin, ayrıca koddaki yorumları da okuyun. Bu yazarın da yardımcı olduğu makalesini okuyun. https://davidtang.io/2016/01/03/controlling-which-tests-run-in-jasmine.html

 //If you want to run few describe only add f so using focus those describe blocks and it's it block get run

  fdescribe("focus description i get run with all my it blocks ", function() {
    it("1 it in fdescribe get executed", function() {
        console.log("1 it in fdescribe get executed unless no fit within describe");

    });
    it("2 it in fdescribe get executed", function() {
        console.log("2 it in fdescribe get executed unless no fit within describe");

    });
    //but if you and fit in fdescribe block only the fit blocks get executed
    fit("3  only fit blocks in  fdescribe get executed", function() {
        console.log("If there is  a fit   in fdescribe only fit blocks  get executed");

    });
  });

  describe("none description i get skipped with all my it blocks ", function() {
        it("1 it in none describe get skipped", function() {
            console.log("1 it in none describe get skipped");

        });
        it("2 it in none describe get skipped", function() {
            console.log("2 it in none describe get skipped");
        });
//What happen if we had fit in a none fdescribe block will it get run ?   yes  
       fit("3 fit in none describe get executed too eventhough it;s just describe ", function() {
            console.log("3 fit in none describe get executed too");
        }); 
      });
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.