Jasmine에서 값이 "크거나 같음"인지 어떻게 테스트 할 수 있습니까?


94

I는 수보다 클 수 또는 제로와 동일해야하므로 값이, 소수 (0)임을 확정 할 1 이상의.

describe('percent',function(){  

  it('should be a decimal', function() {

    var percent = insights.percent; 
    expect(percent).toBeGreaterThan(0);
    expect(percent).toBeLessThan(1);

  });

});

"> = 0"을 어떻게 모방합니까?


관련이있을 수 있습니다 : Jasmine으로 두 경계 확인 (매처 사이) .
alecxe

3
시도 :expect(percent).not.toBeLessThan(0);
jcubic

2
@Patrizio Rullo가 아래 답변에서 언급했듯이 그의 매 처가 병합되었습니다. 이제 Jasmine 2.6에서 사용할 수있는 toBeGreaterThanOrEqual 매 처가 있습니다. jasmine.github.io/api/2.6/matchers.html#toBeGreaterThanOrEqual
Chris Parton

답변:


108

최신 버전의 Jasmine에서 API가 변경 되었기 때문에이를 업데이트해야한다고 생각했습니다. Jasmine API에는 이제 다음 기능이 내장되어 있습니다.

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

아래 조언에 우선하여 이러한 기능을 사용해야합니다.

Jasmine matchers API에 대한 자세한 내용을 보려면 여기를 클릭하십시오.


나는 이것이 오래되고 해결 된 질문이라는 것을 알고 있지만 상당히 깔끔한 솔루션이 누락되었음을 알았습니다. 보다 크거나 같음은보다 작음 함수의 역이므로 다음을 시도하십시오.

expect(percent).not.toBeLessThan(0);

이 접근 방식에서 백분율 값은 비동기 함수에 의해 반환되고 제어 흐름의 일부로 처리 될 수 있습니다.


4
이 대답은 받아 들여 져야합니다. 또한 : expect(2 + 2).not.toBe(5), expect(2 + 2).toBeGreaterThan(0),expect(2 + 2).toBeLessThan(5)
세르게이 Panfilov

expect(NaN).not.toBeLessThan(0);실패하는 대신 통과 하기 때문에 위험 합니다. ( not.toBeLessThan당신이 가정하는 경우에만 역입니다 percent숫자입니다 그렇지 않으면 역이 아니다..)
크리스티안 Hanekamp

@KristianHanekamp가 지적한대로 '백분율'의 값이 NaN (숫자)이 아닐 때도 전달되므로 기대치는 신뢰할 수 없습니다.
Rohit

69

먼저 비교 작업을 실행 한 다음 그것이 진실인지 확인하기 만하면됩니다.

describe('percent',function(){
  it('should be a decimal',function(){

    var percent = insights.percent;

    expect(percent >= 0).toBeTruthy();
    expect(percent).toBeLessThan(1);

  });   
});

9
이것은 작동하지만 불행히도 실패한 "> ="테스트에 의해 생성 된 메시지는 특별히 표현 적이 지 않습니다 ( "진실한 것으로 예상되는 거짓"). 그건 그렇고, 테스트가 비동기적일 필요는 없습니다 (좋아, 그냥 nitpicking;).
hashchange

2
A는 같은 플러그인 @hashchange jasmine2 - 사용자 정의 메시지 , 오류 메시지가 사용자 정의 할 수 있습니다 :since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
TachyonVortex

@TachyonVortex 흥미 롭군요! 나는 그것에 대해 몰랐다. 와 같은 일반적인 비교의 >=경우 테스트를 깔끔하게 유지하기 때문에 사용자 정의 매처를 선호하지만 (쉽게 수행하기 쉽고 아래 답변 참조) 비교가 덜 빈번하거나 표현력이 충분하지 않은 경우 해당 플러그인은 정확히 옳은 일. 감사!
hashchange

expect(percent).toBeGreaterThan(-1);xD는 어떻습니까? 시도하지 않았습니다
Cyril CHAPON 2015-09-10

15

현재 버전의 Jasmine은 toBeGreaterThan 및 toBeLessThan을 지원합니다.

expect(myVariable).toBeGreaterThan(0);

1
질문 "보다 크거나 같음"질문
stealththeninja

5

이것은 기본 기능이 아닙니다.

다음과 같이 사용자 정의 매처를 추가 할 수 있습니다.

JasmineExtensions.js

yourGlobal.addExtraMatchers = function () {
    var addMatcher = function (name, func) {
        func.name = name;
        jasmine.matchers[name] = func;
    };

    addMatcher("toBeGreaterThanOrEqualTo", function () {
                   return {
                       compare: function (actual, expected) {
                           return {
                               pass: actual >= expected
                           };
                       }
                   };
               }
    );
};

사실상 여러분은 matcher에 대한 생성자를 정의하고 있습니다. 이것은 matcher 객체를 반환하는 함수입니다.

'부팅'하기 전에 포함하십시오. 기본 매처는 부팅시로드됩니다.

HTML 파일은 다음과 같아야합니다.

<!-- jasmine test framework-->
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>

<!-- custom matchers -->
<script type="text/javascript" src="Tests/JasmineExtensions.js"></script>
<!-- initialisation-->
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>

그런 다음 boot.js에서 jasmine이 정의 된 후 jasmine.getEnv () 전에 매처를 추가하는 호출을 추가합니다. Get env는 실제로 (약간 오해의 소지가있는) 설정 호출입니다.

매처는 Env 생성자에서 setupCoreMatchers에 대한 호출에서 설정됩니다.

/**
 * ## Require &amp; Instantiate
 *
 * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference.
 */
window.jasmine = jasmineRequire.core(jasmineRequire);
yourGlobal.addExtraMatchers();

/**
 * Since this is being run in a browser and the results should populate to an HTML page, require the HTML-specific Jasmine code, injecting the same reference.
 */
jasmineRequire.html(jasmine);

/**
 * Create the Jasmine environment. This is used to run all specs in a project.
 */
var env = jasmine.getEnv();

샘플 테스트에 사용자 지정 매처를 추가하는 또 다른 방법을 보여 주지만 작동 방식은 .NET Framework를 사용하여 매 테스트 전에 매처를 다시 만드는 것 beforeEach입니다. 그것은 꽤 끔찍한 것 같아서 대신이 접근 방식을 사용할 것이라고 생각했습니다.


5

나는 이것에 늦었지만 누군가가 여전히 답을 찾기 위해이 질문을 방문하는 경우를 대비하여 게시하고 Jasmine 버전 3.0을 사용하고 @Patrizio Rullo에서 언급했듯이 toBeGreaterThanOrEqual / toBeLessThanOrEqual을 사용할 수 있습니다 .

릴리스 노트에 따라 버전 2.5에서 추가되었습니다-https: //github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md

예를 들어

expect(percent).toBeGreaterThanOrEqual(1,"This is optional expect failure message");

또는

expect(percent).toBeGreaterThanOrEqual(1);

jasmine 버전> 2.3.4는 사양을 순서대로 실행하지 않는다고 생각합니다. 따라서 사양을 순서대로 원하는 경우 사용자 지정 매처를 만들 수 있지만 순서가 지정되지 않은 사양에 문제가 없으면 위에서 언급 한 버전을 선택할 수 있습니다.
TraxX

4

나는 오늘 같은 문제에 부딪 혔고, 밝혀진 바와 같이 그것에 대한 사용자 정의 매처를 추가하는 것은 그리 어렵지 않습니다. 사용자 정의 매처의 주요 장점은 테스트가 실패 할 때 의미있는 메시지를 반환 할 수 있다는 것입니다.

그래서 여기에 두 매처 (matcher) 코드입니다, .toBeAtLeast()그리고 .toBeAtMost()경우에 누군가를 도와줍니다.

beforeEach( function () {

  // When beforeEach is called outside of a `describe` scope, the matchers are
  // available globally. See http://stackoverflow.com/a/11942151/508355

  jasmine.addMatchers( {

    toBeAtLeast: function () {
      return {
        compare: function ( actual, expected ) {
          var result = {};
          result.pass = actual >= expected;
          if ( result.pass ) {
            result.message = "Expected " + actual + " to be less than " + expected;
          } else {
            result.message = "Expected " + actual + " to be at least " + expected;
          }
          return result;
        }
      };
    },

    toBeAtMost: function () {
      return {
        compare: function ( actual, expected ) {
          var result = {};
          result.pass = actual <= expected;
          if ( result.pass ) {
            result.message = "Expected " + actual + " to be greater than " + expected;
          } else {
            result.message = "Expected " + actual + " to be at most " + expected;
          }
          return result;
        }
      };
    }

  } );

} );

4

필요한 매처를 추가하기 위해 Jasmine GitHub 마스터 브랜치 내 패치에 병합되었습니다.

toBeGreatThanOrEqual 및 toBeLessThanOrEqual 매처 추가

그러나 나는 그것이 어느 릴리스에 있을지 전혀 모른다. 그 동안 로컬 Jasmine 사본에서 내 커밋 코드를 사용해 볼 수 있습니다.




1

함수 least를 사용하여 값이 다른 값보다 크거나 같은지 확인할 수 있습니다 .

의 별칭 leastgte(크거나 같음)입니다. 반대로, lte(작거나 같음)을 사용하여 반대를 확인할 수 있습니다.

따라서 질문에 답하려면 다음을 수행 할 수 있습니다.

expect(percent).to.be.gte(0)


어떤 버전의 Jasmine을 사용하십니까? 방금 2.6.2에서 2.8로 업그레이드 TypeError: Cannot read property 'be' of undefinedexpect(1).to.be.gte(-1);
Jonathan Parent Lévesque
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.