ฉันมีรายละเอียดความล้มเหลวมากมายจากการเปลี่ยนแปลงทางสถาปัตยกรรมที่ค่อนข้างใหญ่ ฉันต้องการทำงานแก้ไขพวกเขาทีละคนโดยติดแท็กแต่ละคนด้วย 'โฟกัส'
jasmine.js มีคุณสมบัติเช่นนี้หรือไม่? ฉันสาบานว่าจะอ่านในจุดหนึ่งที่ทำ แต่ฉันไม่เห็นในเอกสาร
ฉันมีรายละเอียดความล้มเหลวมากมายจากการเปลี่ยนแปลงทางสถาปัตยกรรมที่ค่อนข้างใหญ่ ฉันต้องการทำงานแก้ไขพวกเขาทีละคนโดยติดแท็กแต่ละคนด้วย 'โฟกัส'
jasmine.js มีคุณสมบัติเช่นนี้หรือไม่? ฉันสาบานว่าจะอ่านในจุดหนึ่งที่ทำ แต่ฉันไม่เห็นในเอกสาร
คำตอบ:
คุณสามารถเรียกใช้ข้อมูลจำเพาะเดียวโดยใช้ 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
describe("MySpec", ...)
และไม่ได้เป็นหนึ่งนี้describe("MySpec blah blah", ...)
? ดูเหมือนว่าจะทำการจับคู่สตริงย่อย
http://localhost:8888?spec=function+1
ควรทำงานด้วย (มักไม่จำเป็นต้องระบุ MySpec)
fdescribe
,fit
เมื่อใช้ Karma คุณสามารถเปิดใช้งานการทดสอบเดียวด้วยfit
หรือfdescribe
( iit
และddescribe
ใน Jasmine ก่อนหน้า 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 () {
// ...
});
});
สิ่งนี้ทำงานเท่านั้นtestA
:
describe('Spec1', function () {
// or "iit" in Jasmine prior 2.1
fit('testA', function () {
// ...
});
it('testB', function () {
// ...
});
});
iit
และddescribe
เป็นส่วนเสริมของ Karma ไม่ใช่จัสมิน
xit
และfit
เข้าit
ยากที่จะอ่านและข้อผิดพลาดง่าย?
ในหลักตั้งแต่ 2.1 พร้อมและfit
fdescribe
สำหรับทุกคนที่สะดุดสิ่งนี้แนวทางที่ดีกว่าซึ่งคุณสามารถตั้งค่าได้จากโค้ดนั้นคือการใช้ปลั๊กอินนี้: 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(){})
มีการพูดคุยกันนาน ๆ ในการเพิ่มสิ่งนี้ลงในจัสมินคอร์ดูที่: https://github.com/pivotal/jasmine/pull/309
หากคุณเคยใช้ดอกมะลิผ่านกรรม / พันธสัญญาคุณควรเข้าใช้ddescribe()
แล้วiit()
fdescribe
และfit
- "ฉ" ความหมาย "ที่มุ่งเน้น" ดูเพิ่มเติมที่jasmine.github.io/2.1/focused_specs.html
มีหลายวิธีที่คุณสามารถทำได้
มี: คุณสมบัติของจัสมินรายละเอียดที่มุ่งเน้น (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();
});
});
อย่างไรก็ตามฉันไม่ชอบความคิดในการแก้ไขการทดสอบของฉัน (พอดีและ fdescribe) เพื่อเรียกใช้การคัดเลือก ฉันชอบใช้นักวิ่งทดสอบอย่างกรรมซึ่งสามารถกรองการทดสอบโดยใช้นิพจน์ทั่วไป
นี่คือตัวอย่างการใช้เสียงฮึดฮัด
$ grunt karma:dev watch --grep=mypattern
หากคุณกำลังใช้อึก (ซึ่งเป็นนักวิ่งงานโปรดของฉัน) คุณสามารถส่งข้อความไปยังอึก - กรรมและกรรมวิธีด้วยรูปแบบและรูปแบบการจับคู่โดยตั้งค่ากำหนดกรรม
ค่อนข้างชอบ:
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
ดังนั้นตอนนี้ฉันสามารถเรียกใช้ข้อมูลจำเพาะเดียวโดยใช้คำอธิบาย:
การทดสอบในพื้นที่ของฉัน: (ดำเนินการ 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
ดูเพิ่มเติมที่: https://github.com/karma-runner/karma-jasmine
คุณสามารถสร้างรายละเอียดทั้งหมดของคุณล่วงหน้า แต่ปิดการใช้งานด้วย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 () {
});
});
ด้วย Jasmine แบบสแตนด์อะโลน (2.0.0) บน spec_runner.htlm ฉันสามารถคลิก spec ที่เจาะจงและมุ่งเน้นไปที่ spec หนึ่ง ฉันควรสังเกตคุณสมบัตินี้ก่อนหน้านี้
ไม่ว่าคุณจะขออะไร แต่การเพิ่มiit
จะทดสอบเฉพาะข้อมูลจำเพาะนั้นและไม่สนใจผู้อื่นทั้งหมดในไฟล์ แต่ddescribe
ทำงานในลักษณะเดียวกัน ดังนั้นคุณสามารถมุ่งเน้นไปที่ข้อมูลจำเพาะที่ใช้iit
หรือddescribe
นี่เป็นคำตอบที่ง่ายที่สุดพร้อมตัวอย่างที่เป็นประโยชน์แม้ใน fdescribe คุณสามารถเรียกใช้ได้เพียงไม่กี่บล็อกเท่านั้น f หมายถึงโฟกัส
นอกจากนี้ในบล็อก 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");
});
});