我如何关注jasmine.js中的一个规范?

Dan*_*nor 146 jasmine

我从一个相当大的架构变化中得到了一堆失败的规范.我想通过用'焦点'标记每一个来逐个修复它们.

jasmine.js有这样的功能吗?我发誓我曾经读过它,但我没有在文档中看到它.

Hud*_*voy 255

当使用噶,您可以启用只有一个测试fitfdescribe(iitddescribe在茉莉花2.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 () {
        // ...
    });
});
Run Code Online (Sandbox Code Playgroud)

这只运行testA:

describe('Spec1', function () {

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

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

});
Run Code Online (Sandbox Code Playgroud)

  • Jasmine 2.1将其引入为"fdescribe"和"fit":https://github.com/jasmine/jasmine/commit/ba0982d89f6d2a6523e505f062638a708ac0c25e#diff-3c2f8da4061d4489b0e5166eb05524c1R669 (77认同)
  • 不知道为什么这不是公认的答案. (23认同)
  • 你必须小心不要提交ii或dd规范.很容易错过这样的东西. (10认同)
  • 这是一个很好的提示,但目前它不是茉莉花.这是像业力这样的测试运动员所允许的.欲了解更多信息,请访问:https://github.com/pivotal/jasmine/pull/309 (7认同)

phi*_*kov 119

核心自2.1以来fitfdescribe.


And*_*rle 54

您可以使用规范的URL运行单个规范

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

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

}) 
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过此URL运行整个规范,http://localhost:8888?spec=MySpec并使用第一个测试http://localhost:8888?spec=MySpec+function+1

  • `fdescribe`,`fit` (117认同)
  • 或者只需点击结果页面上的规格或单个测试 (9认同)
  • 大声笑,这是一个命令行/自动化解决方案? (7认同)

Rim*_*ian 25

有几种方法可以做到.

有:Jasmine的功能聚焦规范(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();
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,我真的不喜欢编辑我的测试(fit和fdescribe)来有选择地运行它们的想法.我更喜欢使用像karma这样的测试运行器,它可以使用正则表达式过滤掉测试.

这是一个使用grunt的例子.

$ grunt karma:dev watch --grep=mypattern
Run Code Online (Sandbox Code Playgroud)

如果你正在使用gulp(这是我最喜欢的任务跑步者),你可以通过设置karma的配置将args传递给gulp -karma与yargs和匹配模式.

有点像:

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);
Run Code Online (Sandbox Code Playgroud)

请参阅我的要点:https://gist.github.com/rimian/0f9b88266a0f63696f21

所以现在,我可以使用描述运行单个规范:

我的本地测试运行:(执行1的14(跳过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
Run Code Online (Sandbox Code Playgroud)

另见:https://github.com/karma-runner/karma-jasmine


alb*_*uth 24

对于任何绊脚石的人来说,一个更好的方法,你可以从代码本身设置,是使用这个插件: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(){}) 
Run Code Online (Sandbox Code Playgroud)

为了将这个添加到Jasmine核心进行了长时间的讨论,请参阅:https://github.com/pivotal/jasmine/pull/309

如果你恰好通过Karma/Testacular使用Jasmine,你应该可以访问ddescribe()iit()

  • ddescribe和iit +1 ...这应该是接受的答案. (12认同)

Eri*_*ock 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 () {
  });
});
Run Code Online (Sandbox Code Playgroud)