Я хочу подтвердить, что значение является десятичным (или 0), поэтому число должно быть больше или равно нулю и меньше 1.
describe('percent',function(){
it('should be a decimal', function() {
var percent = insights.percent;
expect(percent).toBeGreaterThan(0);
expect(percent).toBeLessThan(1);
});
});
Как имитировать "> = 0"?
javascript
tdd
jasmine
Брайс Джонсон
источник
источник
expect(percent).not.toBeLessThan(0);
Ответы:
Я решил, что мне нужно обновить это, поскольку API изменился в более новых версиях Jasmine. В Jasmine API теперь есть встроенные функции для:
Вы должны использовать эти функции вместо приведенных ниже советов.
Щелкните здесь, чтобы получить дополнительную информацию об API сопоставителей Jasmine.
Я знаю, что это старый и решенный вопрос, но я заметил, что довольно аккуратное решение было упущено. Поскольку функция "больше или равно" обратна функции "меньше", попробуйте:expect(percent).not.toBeLessThan(0);
В этом подходе значение процента может быть возвращено асинхронной функцией и обработано как часть потока управления.источник
expect(2 + 2).not.toBe(5)
,expect(2 + 2).toBeGreaterThan(0)
,expect(2 + 2).toBeLessThan(5)
expect(NaN).not.toBeLessThan(0);
проходит, а не терпит неудачу. (not.toBeLessThan
это только обратное, если вы предположите, чтоpercent
это Число. В противном случае это не обратное.)Вам просто нужно сначала запустить операцию сравнения, а затем проверить, правда ли она.
describe('percent',function(){ it('should be a decimal',function(){ var percent = insights.percent; expect(percent >= 0).toBeTruthy(); expect(percent).toBeLessThan(1); }); });
источник
since('expected percent to be greater than or equal to zero').expect(percent >= 0).toBeTruthy();
>=
, я предпочитаю настраиваемый сопоставитель, потому что он сохраняет тесты незагроможденными (достаточно просто, см. Мой ответ ниже), но для сравнений, которые возникают реже или недостаточно выразительны, этот плагин кажется именно тем правильная вещь. Благодарность!expect(percent).toBeGreaterThan(-1);
xD Я не пробовалТекущая версия Jasmine поддерживает toBeGreaterThan и toBeLessThan.
expect(myVariable).toBeGreaterThan(0);
источник
Я опаздываю на это, но публикую его на случай, если кто-то все еще посетит этот вопрос в поисках ответов, я использую 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);
источник
Как ни странно, это не базовая функциональность
Вы можете добавить настраиваемый сопоставитель следующим образом:
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.getEnv (). Get env на самом деле является установочным вызовом (название которого несколько ошибочно).
Сопоставители получают настройку при вызове setupCoreMatchers в конструкторе Env.
/** * ## Require & 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();
Они показывают другой способ добавления настраиваемых сопоставителей в образцы тестов, однако способ его работы заключается в воссоздании сопоставителей перед каждым тестом с использованием файла
beforeEach
. Это кажется довольно ужасным, поэтому я решил использовать этот подход.источник
Сегодня я столкнулся с той же проблемой, и, как оказалось, нетрудно добавить для нее настраиваемый сопоставитель. Основное преимущество настраиваемого сопоставителя заключается в том, что он может возвращать значимые сообщения, когда тест не проходит.
Итак, вот код для двух сопоставителей,
.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.
источник
Я рекомендую использовать этот плагин Jasmine: https://github.com/JamieMason/Jasmine-Matchers
источник
Вы можете использовать эту функцию,
least
чтобы проверить, больше ли какое-либо значение или равно ему.Псевдоним
least
isgte
(больше или равно). И наоборот, вы можете использоватьlte
(меньше или равно), чтобы проверить обратное.Итак, чтобы ответить на вопрос, вы можете:
expect(percent).to.be.gte(0)
источник
TypeError: Cannot read property 'be' of undefined
заexpect(1).to.be.gte(-1);