Как я могу проверить, что значение "больше или равно" в Жасмине?

Я хочу подтвердить, что значение является десятичным (или 0), поэтому число должно быть больше или равно нулю и меньше 1.

describe('percent',function(){  

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

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

  });

});

Как мне подражать " >= 0"?

Ответ 1

Вам просто нужно сначала запустить операцию сравнения, а затем проверить, действительно ли это.

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

    var percent = insights.percent;

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

  });   
});

Ответ 2

Я подумал, что должен обновить это, так как API изменился в более новых версиях Jasmine. Jasmine API теперь имеет встроенные функции для:

  • toBeGreaterThanOrEqual
  • toBeLessThanOrEqual

Вы должны использовать эти функции в соответствии с рекомендациями ниже.

Нажмите здесь для получения дополнительной информации об API Jasmine matchers API


Я знаю, что это старый и решенный вопрос, но я заметил, что довольно аккуратное решение было пропущено. Так как больше или равно обратная функция меньше чем, попробуйте:

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

При таком подходе значение процентов может возвращаться асинхронной функцией и обрабатываться как часть потока управления.

Ответ 3

Текущая версия Jasmine поддерживает toBeGreaterThan и toBeLessThan.

expect(myVariable).toBeGreaterThan(0);

Ответ 4

Несколько странно это не базовая функциональность

Вы можете добавить собственный совпадение следующим образом:

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

Фактически вы определяете конструктор для вашего матчи - это функция, которая возвращает объект-сопряжение.

Включите это перед загрузкой. Базовые сокеты загружаются во время загрузки.

Ваш 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(). Получить env на самом деле является (слегка ошибочно названным) установочным вызовом.

Матчи получают настройку в вызове setupCoreMatchers в конструкторе Env.

/**
 * ## Require &amp; Instantiate
 *
 * Require Jasmine core files. Specifically, this requires and attaches all of Jasmine 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();

Они показывают другой способ добавления пользовательских совпадений в тестовых тестах, однако способ, которым он работает, состоит в том, чтобы воссоздать совпадение перед каждым отдельным тестом, используя 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);

Ответ 6

Сегодня я столкнулся с одной и той же проблемой, и, как оказалось, добавить к ней пользовательский макет сложно. Основным преимуществом пользовательского совпадения является то, что он может возвращать значимые сообщения, когда тест терпит неудачу.

Итак, вот код для двух матчи, .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;
        }
      };
    }

  } );

} );

Ответ 7

Это было просто объединено в главном ветки Jasmine GitHub, чтобы добавить необходимые вам помощники:

Добавить вBeGreatThanOrEqual и toBeLessThanOrEqual матчи

Но я понятия не имею, в каком выпуске это будет. В то же время вы можете попытаться использовать код моей фиксации в своей локальной копии Жасмин.

Ответ 9

Вы можете использовать функцию least, чтобы проверить, больше ли значение или какое-то другое значение.

Псевдоним least - gte (большой или равный). И наоборот, вы можете использовать lte (меньше или равно), чтобы проверить обратное.

Итак, чтобы ответить на вопрос, вы можете сделать:

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

Ответ 10

Просто используйте следующее:

expect(percent >= 0).toBeTruthy()