jasmine.jsの1つの仕様に焦点を合わせるにはどうすればよいですか?


154

かなり大きなアーキテクチャの変更により、多くの失敗した仕様があります。それぞれに「フォーカス」のタグを付けて、1つずつ修正していきたいと思います。

jasmine.jsにはこのような機能がありますか?ある時点で読むと誓ったが、ドキュメントには表示されていない。


1
@ phil-pirozhkovの最近の回答は、これがv2.1でJaswineに導入されたことを示しています
alxndr 2014年

回答:


56

スペックのURLを使用して単一のスペックを実行できます

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

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

}) 

これで、このURL http://localhost:8888?spec=MySpecと最初のテストで仕様全体を実行できますhttp://localhost:8888?spec=MySpec+function+1


10
または、結果ページの仕様または個別のテストをクリックするだけ
jackocnr

驚くばかり。さて、これを実行するにはどうすればよいですか?describe("MySpec", ...)これではありません:describe("MySpec blah blah", ...)?部分文字列の一致を行っているようです。
Ian Phillips 2014年

describe.onlyは、jasmine 2.0を使用している場合の正解です。他のバージョンについては不明です。
davidjnelson 2014

http://localhost:8888?spec=function+1動作するはずです(多くの場合、MySpecを指定する必要はありません)
lee penkman、2015

123
fdescribefit
basarat 2015年

269

Karmaを使用する場合、fitor fdescribeiitおよびddescribe2.1以前のJasmine)では1つのテストのみを有効にできます。


これは実行するだけSpec1です:

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

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

これは実行するだけtestAです:

describe('Spec1', function () {

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

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

});

7
良いヒントですが、現在はジャスミンにはありません。これはカルマのようなテストランナーによって許可されています。詳細については、github.com
pivotal

77
ジャスミン2.1紹介このようにfdescribeしてfitgithub.com/jasmine/jasmine/commit/...
alxndr

10
iiまたはdd仕様をコミットしないように注意する必要があります。そんなものを見逃しやすい。
Rimian 14

@jameshfisher質問はまた2011年に頼まれた、iitddescribeカルマの追加ではなく、ジャスミンです。
Justus Romijn 2015年

ミキシングxitfitイントゥitが読みにくく、エラーが発生しやすいと思うのは私だけですか?
Bセブン

119

2.1以降のコアではとを使用しfitていfdescribeます。


1
'fit'を使用してコンソールでカルマを使用してテストを実行すると、スキップされたテストが多数表示されますが、テストエラーを表示するには、一番上までスクロールする必要があります。'fit'なしでテストを実行すると、下部にエラーの概要があるため、そのような問題は発生しません。この問題を修正する方法を知っていますか?
tytyryty 2017

25

これに遭遇した人にとって、コード自体から設定できるより良いアプローチは、このプラグインを使用することです:https : //github.com/davemo/jasmine-only

次のように、コードに仕様の独占権を設定できます。

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

これをJasmineコアに追加するための長い議論がありました。https//github.com/pivotal/jasmine/pull/309を参照してください。

あなたはカルマ/ Testacular経由ジャスミンを使用することが起こるならば、あなたはすでにへのアクセス権を持っている必要がありますddescribe()し、iit()


12
ddescribeおよびiitの+1 ...これは受け入れられる答えです。
Seth Flowers

これはまた、新しい構文があることに注意してください...最善であるfdescribefit「F」の意味は「集中しました」 - 。jasmine.github.io/2.1/focused_specs.html
Ezekiel Victor

25

あなたがそれを行うことができるいくつかの方法があります。

あります:Jasmineの機能Focused Specs(2.2):http : //jasmine.github.io/2.2/focused_specs.html

仕様に焦点を合わせると、仕様が実行される唯一の仕様になります。fitで宣言されたすべての仕様に焦点が当てられます。

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

ただし、テスト(fitおよびfdescribe)を編集して選択的に実行するという考えはあまり好きではありません。カルマのようなテストランナーを使用したい、正規表現を使用してテストを除外できるます。

これがgruntの使用例です。

$ grunt karma:dev watch --grep=mypattern

gulp(これが私のお気に入りのタスクランナーです)を使用している場合は、argsをgulp-karmaに渡すことができます。 karmaの構成を設定をyargsを使用してgulpに渡し、パターンを一致。

このようなちょっと:

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

私の要点を参照してください:https : //gist.github.com/rimian/0f9b88266a0f63696f21

だから今、私は説明を使用して単一の仕様を実行できます:

私のローカルテスト実行:(14のうち1を実行(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

次も参照してください:https : //github.com/karma-runner/karma-jasmine


テストを選択的に実行するためにgruntを使用するというあなたのアイデアが好きですが、gulpおよびkarma configがより柔軟で、拡張しやすく、その点について理解しやすくなっていることを願っています。
nocarrier

8

あなたは、フロントまでお使いのすべての仕様を作成しますが、それらを無効にすることができますxdescribeし、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

スタンドアロンのJasmine(2.0.0)では、spec_runner.htlmで特定の仕様をクリックして、その1つの仕様に焦点を当てることができました。私はこの機能に以前気付いていたはずです。


1

正確にあなたが要求したものではありませんが、追加iitはその特定の仕様のみをテストし、ファイル内の他のすべてを無視ddescribeし、同じように動作します。したがって、iitまたはを使用して特定の仕様に集中できます。ddescribe


1

これは、実用的な例を示した最も単純な回答です。fdescribeでも、それを使用して実行できるitブロックはほとんどありません。fはフォーカスを意味します。

また、単に説明しているだけのfdescribeブロックでは、適切とマークすることで特定のitブロックのみを選択できます。

以下のコードを実行してコンソールログを確認し、コード内のコメントも読んでください。この著者の記事も読んでください。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");
        }); 
      });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.