How can I test that a value is "greater than or equal to" in Jasmine?

我想确认一个值是一个十进制(或0) ,所以数字应该大于或等于零 还有小于1。

describe('percent',function(){


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


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


});


});

如何模仿“ > = 0”?

125545 次浏览

您只需要首先运行比较操作,然后检查它是否是真实的。

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


var percent = insights.percent;


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


});
});

有点奇怪,这不是基本的功能

您可以像下面这样添加一个自定义匹配器:

Jasmine Extensions.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 ()之前添加匹配器。Getenv 实际上是一个设置调用(名称有点误导人)。

在 Env 构造函数中调用 setupCoreMatcher 来设置匹配器。

/**
* ## 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();

They show another way of adding custom matchers in the sample tests, however the way it works is to recreate the matcher(s) before every single test using a beforeEach. That seems pretty horrible so I thought I'd go with this approach instead.

我建议使用这个茉莉花插头: Https://github.com/jamiemason/jasmine-matchers

我今天碰到了同样的问题,事实证明,为它添加一个自定义匹配器并不是那么困难。自定义匹配器的主要优点是,当测试失败时,它可以返回有意义的消息。

这里是两个匹配器的代码,.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 中 API 已经改变了。Jasmine API 现在内置了以下函数:

  • 大于不平等
  • 不平等

您应该优先使用这些函数,而不是下面的建议。

点击这里获得更多关于 Jasmine matchers API 的信息


我知道这是一个古老的已经解决的问题,但是我注意到一个相当简洁的解决方案被遗漏了。因为大于或等于是小于函数的倒数,所以尝试:

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

在这种方法中,百分比的值可以由异步函数返回,并作为控制流的一部分进行处理。

It was just merged in the Jasmine GitHub master branch my patch to add the matchers you need:

添加 toBeGreatThanOrequals 和 toBeLessThanOrequals 匹配器

但我不知道它会在哪个版本中发布。同时,您可以尝试在本地 Jasmine 副本中使用我的提交代码。

当前版本的 Jasmine 支持 toBeGreaterThan 和 toBeLessThan。

expect(myVariable).toBeGreaterThan(0);

可以使用函数 least检查某个值是否大于或等于其他值。

least的别名是 gte(大于或等于)。反之亦然,您可以使用 lte(小于或等于)来检查相反的情况。

So, to answer the question, you can do:

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

我迟到了,但是发布它只是为了以防有人仍然访问这个问题寻找答案,我正在使用 Jasmine 3.0版本,正如@Patrizio Rullo 提到的,你可以使用 大于等于/小于等于

它是按照发行说明 -https://github.com/jasmine/jasmine/blob/master/release_notes/2.5.0.md在2.5版本中添加的

举例来说。

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

或者

expect(percent).toBeGreaterThanOrEqual(1);

使用这个更新的公式:

大于不平等 不平等

应该有用!