Bagaimana cara fokus pada satu spek di jasmine.js?


154

Saya memiliki banyak spesifikasi gagal dari perubahan arsitektur yang agak besar. Saya ingin memperbaiki mereka satu per satu dengan memberi tag masing-masing dengan 'fokus'.

Apakah jasmine.js memiliki fitur seperti ini? Saya bersumpah saya membaca pada satu titik yang benar, tetapi saya tidak melihatnya di dokumen.


1
Jawaban terbaru @ phil-pirozhkov menunjukkan bahwa ini diperkenalkan ke Jaswine di v2.1
alxndr

Jawaban:


56

Anda dapat menjalankan satu spec dengan menggunakan url untuk spec

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

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

}) 

Sekarang Anda dapat menjalankan hanya seluruh spek dengan url ini http://localhost:8888?spec=MySpecdan tes pertama dengannyahttp://localhost:8888?spec=MySpec+function+1


10
Atau cukup klik pada spesifikasi atau tes individual pada halaman hasil
jackocnr

Luar biasa. Sekarang, bagaimana cara mendapatkannya untuk menjalankan satu ini: describe("MySpec", ...)dan tidak satu ini: describe("MySpec blah blah", ...)? Tampaknya melakukan pertandingan substring.
Ian Phillips

menggambarkan.hanya adalah jawaban yang benar jika menggunakan melati 2.0, tidak yakin tentang versi lain.
davidjnelson

http://localhost:8888?spec=function+1harus bekerja juga (seringkali tidak perlu menentukan MySpec)
lee penkman

123
fdescribe,fit
basarat

269

Saat menggunakan Karma, Anda hanya dapat mengaktifkan satu tes dengan fitatau fdescribe( iitdan ddescribedalam Jasmine sebelum 2.1).


Ini hanya berjalan Spec1:

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

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

Ini hanya berjalan testA:

describe('Spec1', function () {

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

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

});

7
itu tip yang bagus, tetapi saat ini tidak melati. ini diizinkan oleh pelari ujian seperti karma. untuk info lebih lanjut baca di: github.com/pivotal/jasmine/pull/309
p1100i

77
Jasmine 2.1 memperkenalkan ini sebagai fdescribedan fit: github.com/jasmine/jasmine/commit/…
alxndr

10
Anda harus berhati-hati untuk tidak melakukan spesifikasi ii atau dd. Mudah melewatkan sesuatu seperti itu.
Rimian

@jameshfisher pertanyaan diajukan pada tahun 2011. Juga, iitdan ddescribemerupakan tambahan dari Karma, bukan Jasmine.
Justus Romijn

Apakah saya satu-satunya yang berpikir bahwa mencampur xitdan fitmenjadi itsulit dibaca dan rawan kesalahan?
B Seven

119

Dalam inti sejak 2.1 dengan fitdan fdescribe.


1
Ketika saya menggunakan 'fit' dan menjalankan tes saya di konsol menggunakan karma, saya bisa melihat banyak tes yang dilewati, tetapi untuk melihat kesalahan tes saya perlu gulir ke atas. Ketika saya menjalankan tes tanpa 'pas' saya tidak memiliki masalah seperti itu, karena saya memiliki ringkasan kesalahan di bagian bawah. Apakah Anda tahu cara memperbaiki masalah ini?
tytyryty

25

Bagi siapa pun yang menemukan ini, pendekatan yang lebih baik, yang dapat Anda atur dari kode itu sendiri, adalah dengan menggunakan plugin ini: https://github.com/davemo/jasmine-only

Ini memungkinkan Anda mengatur eksklusivitas spesifikasi pada kode seperti ini:

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(){}) 

Telah ada diskusi panjang untuk mendapatkan ini ditambahkan ke Jasmine core, lihat: https://github.com/pivotal/jasmine/pull/309

Jika Anda menggunakan Jasmine melalui Karma / Testacular Anda seharusnya sudah memiliki akses ke ddescribe()daniit()


12
+1 untuk ddescribe dan iit ... Ini harus menjadi jawaban yang diterima.
Seth Flowers

Ini yang terbaik ... Perhatikan juga bahwa sintaks baru adalah fdescribedan fit- "f" yang berarti "fokus". Lihat juga jasmine.github.io/2.1/focused_specs.html
Yehezkiel Victor

25

Ada beberapa cara untuk melakukannya.

Ada: Spesifikasi Fokus fitur Jasmine (2.2): http://jasmine.github.io/2.2/focused_specs.html

Spesifikasi fokus akan menjadikannya satu-satunya spesifikasi yang berjalan. Setiap spec yang dinyatakan dengan fit difokuskan.

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();
  });
});

Namun, saya tidak terlalu suka ide mengedit tes saya (cocok dan menggambarkan) untuk menjalankannya secara selektif. Saya lebih suka menggunakan pelari uji seperti karma yang dapat menyaring tes menggunakan ekspresi reguler.

Berikut ini contoh menggunakan gerutuan .

$ grunt karma:dev watch --grep=mypattern

Jika Anda menggunakan gulp (yang merupakan pelari tugas favorit saya), Anda dapat meneruskan args ke gulp -karma dengan yargs dan mencocokkan pola dengan mengatur konfigurasi karma.

Agak seperti ini:

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);

Lihat inti saya: https://gist.github.com/rimian/0f9b88266a0f63696f21

Jadi sekarang, saya dapat menjalankan satu spec menggunakan deskripsi:

Uji coba lokal saya: (Eksekusi 1 dari 14 (dilewati 13))

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

Lihat juga: https://github.com/karma-runner/karma-jasmine


Saya suka ide Anda menggunakan grunt untuk menjalankan tes secara selektif, tetapi saya berharap tegukan dan konfigurasi karma lebih fleksibel, lebih mudah diperluas, dan lebih mudah dipahami dalam hal ini.
nocarrier

8

Anda dapat membuat semua spesifikasi Anda di muka tetapi menonaktifkannya dengan xdescribedan xitsampai Anda siap untuk mengujinya.

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

Dengan Jasmine yang berdiri sendiri (2.0.0), pada spec_runner.htlm, saya bisa mengklik spec tertentu dan fokus pada spec yang satu itu. Saya seharusnya memperhatikan fitur ini sebelumnya.


1

Tidak persis apa yang Anda minta tetapi menambahkan iithanya akan menguji spesifikasi tertentu dan mengabaikan semua yang lain dalam file, ddescribebekerja dengan cara yang sama. Jadi Anda bisa fokus pada spec tertentu menggunakan iitatauddescribe


1

Ini adalah jawaban yang paling sederhana dengan contoh praktis. Bahkan dalam deskripsi Anda dapat menjalankan beberapa blok itu menggunakannya. f berarti fokus.

Juga di blok tidak ada deskripsi yang hanya menggambarkan, Anda dapat memilih hanya itu blok dengan menandainya sebagai cocok.

Silakan jalankan kode di bawah ini dan amati log konsol, baca juga komentar dalam kode. Baca artikel penulis ini juga membantu. 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");
        }); 
      });
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.