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

如何关注jasmine.js中的一个规范?,jasmine,Jasmine,我在一次相当大的架构更改中遇到了一系列失败的规范。我想一个接一个地修复它们,用“焦点”标记每一个 jasmine.js有这样的功能吗?我发誓我曾经读过它,但我在文档中没有看到它。您可以使用规范的url运行单个规范 describe("MySpec", function() { it('function 1', function() { //... }) it('function 2', function() { //... } }) 现在你可

我在一次相当大的架构更改中遇到了一系列失败的规范。我想一个接一个地修复它们,用“焦点”标记每一个


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

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

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

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

}) 

现在你可以通过这个url
http://localhost:8888?spec=MySpec
和a使用
http://localhost:8888?spec=MySpec+功能+1

您可以预先创建所有规格,但使用
xdescripe
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 () {
  });
});

对于遇到此问题的任何人,可以从代码本身设置的更好方法是使用此插件:

它允许您在代码上设置规范专有权,如下所示:

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(){}) 
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);
关于如何将其添加到Jasmine core中,已经进行了很长时间的讨论,请参见:


如果您碰巧通过Karma/TestCular使用Jasmine,您应该已经可以访问独立Jasmine(2.0.0)的
ddescribe()
iit()
,在spec_runner.htlm上,我可以单击一个特定的规范并关注该规范。我应该早就注意到这个特性。

使用Karma时,您只能使用
fit
fdescribe
iit
ddescribe
在Jasmine 2.1之前的版本中)启用一个测试


这只运行
Spec1

//或Jasmine 2.1之前版本中的“ddescribe”
fdescribe('Spec1',函数(){
它('应该做某事',函数(){
// ...
});
});
描述('Spec2',函数(){
它('应该做某事',函数(){
// ...
});
});

此操作仅运行testA:

description('Spec1',函数(){
//还是《茉莉花2.1版》中的“iit”
拟合('testA',函数(){
// ...
});
它('testB',函数(){
// ...
});
});

不完全符合您的要求,但添加
iit
将只测试该特定规范,而忽略文件中的所有其他规范,
ddescribe
的工作方式与此相同。因此,您可以使用
iit
ddescribe

来关注特定的规范,因为2.1中的
fit
fdescribe
有几种方法可以做到这一点

有:茉莉花的特色聚焦规格(2.2):

聚焦规格将使其成为唯一运行的规格。使用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(这是我最喜欢的任务执行器),您可以通过设置karma的配置将args传递到带有yargs和匹配模式

有点像这样:

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(){}) 
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);
见我的要点:

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

我的本地测试运行:(执行14次中的1次(跳过13次))


另请参见:

这是最简单的答案,并提供了一个实际示例。即使在fdescribe中,您也可以使用它运行几个it块。f代表专注

此外,在仅用于描述的“无fdescribe”块中,您可以通过将特定it块标记为“适合”来仅选择它们

请运行下面的代码并观察控制台日志,同时阅读代码中的注释。 阅读本文作者的文章也会有所帮助


或者只需点击结果页面上的规格或单个测试。现在,我如何让它运行这个:
descripe(“MySpec”),而不是这个:
descripe(“MySpec”等等),…)
?它似乎正在进行子字符串匹配。如果使用jasmine 2.0,则说明。仅是正确答案,不确定其他版本。
http://localhost:8888?spec=function+1
应该也能用(通常不需要指定MySpec)@basarat这就是我要找的。在文档中找不到它。谢谢+1用于ddescribe和iit。。。这应该是公认的答案。这是最好的。。。还要注意,新语法是
fdescribe
fit
-“f”表示“聚焦”。也可以看到这是一个很好的提示,但目前它不是在茉莉花。这是像karma这样的测试跑步者所允许的。有关更多信息,请阅读:Jasmine 2.1将其介绍为
fdescribe
fit
:您必须小心不要提交ii或dd规范。很容易错过这样的事情。@jameshfisher这个问题是在2011年提出的。而且,
iit
ddescribe
是业力的补充,不是Jasmine。我是唯一一个认为将
xit
fit
混合到
it
中很难阅读并且容易出错的人吗?@phil pirozhkov最近的回答指出,这是在v2.1中引入Jasmine的,当我使用“fit”并使用karma在控制台中运行测试时,我可以看到很多跳过的测试,但要查看测试错误,我需要滚动到顶部。当我运行没有“fit”的测试时,我没有这样的问题,因为我在底部有错误摘要。你知道如何解决这个问题吗?我喜欢你使用grunt有选择地运行测试的想法,但我希望gulp和karma配置更灵活,更易于扩展,更易于理解。