我从一个相当大的架构变化中得到了许多失败的规范。我想通过用'焦点'标记每一个来逐一修复它们。
jasmine.js有这样的功能吗?我发誓我曾经读过它,但我没有在文档中看到它。
答案 0 :(得分:240)
使用Karma时,您只能在2.1之前的Jasmine中使用fit
或fdescribe
(iit
和ddescribe
启用一项测试。
这只会运行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 () {
// ...
});
});
答案 1 :(得分:117)
In core自2.1以来fit
和fdescribe
。
答案 2 :(得分:53)
您可以使用规范的网址
运行单个规范describe("MySpec", function() {
it('function 1', function() {
//...
})
it('function 2', function() {
//...
}
})
现在,您可以通过此网址http://localhost:8888?spec=MySpec
运行整个规范,并使用http://localhost:8888?spec=MySpec+function+1
进行首次测试
答案 3 :(得分: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(){})
长期讨论将这个添加到Jasmine核心,请参阅:https://github.com/pivotal/jasmine/pull/309
如果您恰好通过Karma / Testacular使用Jasmine,您应该可以访问ddescribe()
和iit()
答案 4 :(得分:24)
有几种方法可以做到。
有:Jasmine的功能聚焦规格(2.2):http://jasmine.github.io/2.2/focused_specs.html
聚焦规格将使它们成为唯一运行的规格。任何以适合声明的规范都是重点。
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 (这是我最喜欢的任务选手),你可以通过设置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);
请参阅我的要点: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
答案 5 :(得分: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 () {
});
});
答案 6 :(得分:1)
使用独立的Jasmine(2.0.0),在spec_runner.htlm上,我可以点击特定的规范并专注于那个规范。我应该早点注意到这个功能。
答案 7 :(得分:1)
不完全是您要求的内容,但添加iit
只会测试该特定规范并忽略文件中的所有其他规范,ddescribe
的工作方式相同。因此,您可以使用iit
或ddescribe
答案 8 :(得分:0)
这是一个带有实际示例的最简单答案。即使在fdescribe中,您也可以使用它运行很少的代码块。 f表示焦点。
在刚刚描述的none fdescribe块中,您也可以通过将其标记为合适来仅选择特定的块。
请运行以下代码,并观察控制台日志,并阅读代码中的注释。 阅读该作者的文章也有帮助。 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");
});
});