Как я могу проверить, что значение "больше или равно" в Жасмине?
Я хочу подтвердить, что значение является десятичным (или 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 & 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 матчи
Но я понятия не имею, в каком выпуске это будет. В то же время вы можете попытаться использовать код моей фиксации в своей локальной копии Жасмин.
Ответ 8
Я рекомендую использовать этот зажим Jasmine:
https://github.com/JamieMason/Jasmine-Matchers
Ответ 9
Вы можете использовать функцию least
, чтобы проверить, больше ли значение или какое-то другое значение.
Псевдоним least
- gte
(большой или равный). И наоборот, вы можете использовать lte
(меньше или равно), чтобы проверить обратное.
Итак, чтобы ответить на вопрос, вы можете сделать:
expect(percent).to.be.gte(0)
Ответ 10
Просто используйте следующее:
expect(percent >= 0).toBeTruthy()