jasmine.js에서 하나의 사양에 집중하는 방법은 무엇입니까?


154

다소 큰 아키텍처 변경으로 인해 실패한 사양이 많이 있습니다. 각 항목에 '초점'으로 태그를 지정하여 하나씩 수정하려고합니다.

jasmine.js에는 이와 같은 기능이 있습니까? 나는 그것이 한 지점에서 읽었다 고 맹세했지만 문서에서는 그것을 보지 못했다.


1
@ phil-pirozhkov의 최근 답변은 이것이 v2.1에서 Jaswine에 도입되었다고 지적합니다.
alxndr

답변:


56

스펙의 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


10
또는 결과 페이지에서 스펙 또는 개별 테스트를 클릭하십시오.
jackocnr

대박. 자, 이것을 어떻게 실행 합니까? describe("MySpec", ...)이것이 아니라 : describe("MySpec blah blah", ...)? 하위 문자열 일치를 수행하는 것 같습니다.
Ian Phillips

jasmine 2.0을 사용하는 경우 describe.only 만 정답입니다. 다른 버전은 확실하지 않습니다.
davidjnelson

http://localhost:8888?spec=function+1작동해야 함 (종종 MySpec을 지정할 필요가 없음)
lee penkman

123
fdescribe,fit
basarat

269

Karma를 사용하는 경우 fitor fdescribe( iitddescribe2.1 이전 Jasmine)로 하나의 테스트 만 활성화 할 수 있습니다 .


이것은 단지 다음을 실행합니다 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 () {
        // ...
    });

});

7
좋은 팁이지만 현재 재스민에는 없습니다. 이것은 카르마와 같은 테스트 러너가 허용합니다. 자세한 정보는 읽을 위해 github.com/pivotal/jasmine/pull/309
p1100i

77
재스민 2.1 소개하고이 같은 fdescribefit: github.com/jasmine/jasmine/commit/...
alxndr

10
ii 또는 dd 사양을 커밋하지 않도록주의해야합니다. 그런 것을 놓치기 쉽다.
Rimian

@jameshfisher 문제는 또한 2011 년에 요청했다, iit그리고 ddescribe카르마의 추가하지 재스민이다.
Justus Romijn

나는 유일한 혼합 있다고 생각하는 건가요 xitfitit읽기 쉬운 오류가 어렵다은?
B Seven

119

핵심에서 2.1 이후 fitfdescribe.


1
'fit'을 사용하고 karma를 사용하여 콘솔에서 테스트를 실행하면 건너 뛴 테스트가 많이 있지만 테스트 오류를 ​​보려면 맨 위로 스크롤해야합니다. '적합'없이 테스트를 실행하면 맨 아래에 오류 요약이 있으므로 그러한 문제가 없습니다. 이 문제를 해결하는 방법을 알고 있습니까?
tytyryty

25

이 문제를 해결하려는 사람은 코드 자체에서 설정할 수있는 더 나은 방법은이 플러그인을 사용하는 것입니다. 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()


12
ddescribe 및 iit의 경우 +1입니다. 이것이 허용되는 답변이어야합니다.
세스 꽃

이것은 또한 새로운 구문이 있습니다 ... 최고 fdescribefit"F"의미는 "집중"-. jasmine.github.io/2.1/focused_specs.html
Ezekiel Victor

25

당신이 그것을 할 수있는 몇 가지 방법이 있습니다.

Jasmine의 기능 Focused Specs (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 를 사용하는 예 입니다.

$ grunt karma:dev watch --grep=mypattern

당신이 사용하는 경우 꿀꺽을 (내가 좋아하는 작업 주자 인), 당신은에 인수 전달할 수 있습니다 꿀꺽 - 카르마 카르마의 설정을 설정하여 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 of 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


grunt를 사용하여 선택적으로 테스트를 실행한다는 아이디어가 마음에 들지만 gulp 및 karma 구성이 더 유연하고 확장 가능하며 이해하기 쉽기를 바랍니다.
nocarrier 2018 년

8

당신은 앞까지 당신의 모든 사양을 만들 수 있지만, 그들을 해제 할 수 있습니다 xdescribexit이를 테스트 할 수있는 거 준비가 될 때까지.

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 () {
  });
});

1

spec_runner.htlm에서 독립형 Jasmine (2.0.0)을 사용하면 특정 사양을 클릭하고 해당 사양에 집중할 수 있습니다. 나는이 기능을 일찍 알아 차렸어야했다.


1

정확히 요구 한 것이 아니라 추가 iit하면 특정 사양 만 테스트하고 파일의 다른 모든 내용은 무시 ddescribe하고 동일한 방식으로 작동합니다. 당신이 사용하여 특정 사양에 집중할 수 있도록 iit하거나ddescribe


1

이것은 실제 예제에서 가장 단순화 된 답변입니다. 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");
        }); 
      });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.