web-dev-qa-db-ja.com

jasmine.jsの1つの仕様に集中するにはどうすればよいですか?

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

Jasmine.jsにはこのような機能がありますか?私はある時点でそれがそうであると読んだと誓いましたが、私はそれをドキュメントに見ません。

143
Dane O'Connor

仕様のURLを使用して、単一の仕様を実行できます

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

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

}) 

これで、このURL http://localhost:8888?spec=MySpechttp://localhost:8888?spec=MySpec+function+1を使用した最初のテストによって、仕様全体のみを実行できます。

53

Karmaを使用する場合、fitまたはfdescribe(2.1より前のJasmineではiitおよびddescribe)を使用して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 () {
        // ...
    });

});
248
Hudvoy

コア内 2.1以降、fitおよびfdescribeを使用。

117
phil pirozhkov

いくつかの方法があります。

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)を編集して選択的に実行するというアイデアはあまり好きではありません。 karma のようなテストランナーを使用することを好みます。これは正規表現を使用してテストを除外できます。

次に、gruntを使用した例を示します。

$ grunt karma:dev watch --grep=mypattern

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

ちょっとこんな感じ:

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

24
Rimian

これにつまずいた人にとって、コード自体から設定できるより良いアプローチは、このプラグインを使用することです: 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 を参照してください。

Karma/Testacular経由でJasmineを使用している場合は、ddescribe()およびiit()へのアクセス権が既にあるはずです。

24
albemuth

すべての仕様を事前に作成できますが、テストの準備が整うまで、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 () {
  });
});
8
Eric Bock

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

1
Filype

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

1
taro