我想确认一个值是十进制(或0),因此该数字应大于或等于零且小于1.
describe('percent',function(){
it('should be a decimal', function() {
var percent = insights.percent;
expect(percent).toBeGreaterThan(0);
expect(percent).toBeLessThan(1);
});
});
我如何模仿“> = 0”?
答案 0 :(得分:95)
我知道这是一个古老且已经解决的问题,但我注意到错过了一个相当简洁的解决方案。由于大于或等于小于函数的倒数,请尝试:
expect(percent).not.toBeLessThan(0);
在这种方法中,百分比的值可以由异步函数返回,并作为控制流的一部分进行处理。
答案 1 :(得分:64)
您只需先运行比较操作,然后检查它是否真实。
describe('percent',function(){
it('should be a decimal',function(){
var percent = insights.percent;
expect(percent >= 0).toBeTruthy();
expect(percent).toBeLessThan(1);
});
});
答案 2 :(得分:11)
当前版本的Jasmine支持toBeGreaterThan和toBeLessThan。
expect(myVariable).toBeGreaterThan(0);
答案 3 :(得分:5)
有点扼杀这不是基本功能
您可以添加如下自定义匹配器:
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
};
}
};
}
);
};
实际上,您为匹配器定义了一个构造函数 - 它是一个返回匹配器对象的函数。
在你开机之前加入#39;基本匹配器在启动时加载。
您的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实际上是一个(略带误导性的)设置调用。
匹配器在Env构造函数中调用setupCoreMatchers时进行设置。
/**
* ## 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
的每次测试之前重新创建匹配器。这看起来非常可怕,所以我想我会采用这种方法。
答案 4 :(得分:4)
我今天遇到了同样的问题,事实证明,为它添加自定义匹配器并不困难。自定义匹配器的主要优点是,当测试失败时,它可以返回有意义的消息。
所以这里是两个匹配器的代码,.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;
}
};
}
} );
} );
答案 5 :(得分:4)
它刚刚在Jasmine GitHub主分支中合并了我的补丁,以添加您需要的匹配器:
Add toBeGreatThanOrEqual and toBeLessThanOrEqual matchers
但我不知道它会在哪个版本发布。在此期间,您可以尝试在本地Jasmine副本中使用我的提交代码。
答案 6 :(得分:4)
我迟到了,但发布它以防万一有人仍在访问这个问题寻找答案,我使用的是Jasmine 3.0版,如@Patrizio Rullo所提到的,你可以使用 toBeGreaterThanOrEqual / toBeLessThanOrEqual 强>
根据发行说明 - 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);
答案 7 :(得分:1)
我建议使用这个Jasmine插件: https://github.com/JamieMason/Jasmine-Matchers
答案 8 :(得分:1)
您可以使用函数least
检查某个值是否大于或等于某个其他值。
least
的别名为gte
(大于或等于)。反之亦然,您可以使用lte
(小于或等于)来检查相反的情况。
所以,要回答这个问题,你可以这样做:
expect(percent).to.be.gte(0)
答案 9 :(得分:0)
让我感到惊讶的是,上述所有人都浪费了很多时间来尝试“茉莉花方式”,而多年来,茉莉花匹配者被证明是不方便的,并且仅涵盖基本案例。
添加自定义匹配器的答案更加糟糕,因为它将使新的开发人员感到惊讶,这些开发人员将来会加入您的团队,也许除了您将使用它之外,没有其他人。
为什么不简单
describe('percent',function(){
it('should be a decimal', function() {
var percent = insights.percent;
expect(percent>=0 && percent<1).toBeTruthy();
});
});
继续前进,做些有用的事情吗?测试用例名称已经在告诉您应该使用的百分比。
答案 10 :(得分:0)
使用此更新的公式:
要大于等于 toBeLessThanOrEqual
应该工作!