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

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에서 API가 변경 되었기 때문에이를 업데이트해야한다고 생각했습니다. Jasmine API에는 이제 다음 기능이 내장되어 있습니다.

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

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

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


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

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

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


답변

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

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

    var percent = insights.percent;

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

  });
});


답변

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

expect(myVariable).toBeGreaterThan(0);


답변

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

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

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입니다. 그것은 꽤 끔찍한 것 같아서 대신이 접근 방식을 사용할 것이라고 생각했습니다.


답변

나는 이것에 늦었지만 누군가가 여전히 답을 찾기 위해이 질문을 방문하는 경우를 대비하여 게시하고 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);


답변

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

그래서 여기에 두 매처 (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;
        }
      };
    }

  } );

} );


답변

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

toBeGreatThanOrEqual 및 toBeLessThanOrEqual 매처 추가

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