我如何testingJasmine中的值是“大于还是等于”?

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

describe('percent',function(){ it('should be a decimal', function() { var percent = insights.percent; expect(percent).toBeGreaterThan(0); expect(percent).toBeLessThan(1); }); }); 

我如何模仿“> = 0”?

我知道这是一个古老的问题,但我注意到一个相当整洁的解决scheme错过了。 由于大于或等于小于函数的反函数,请尝试:

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

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

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

 describe('percent',function(){ it('should be a decimal',function(){ var percent = insights.percent; expect(percent >= 0).toBeTruthy(); expect(percent).toBeLessThan(1); }); }); 

有点strangley这不是基本的function

你可以像这样添加一个自定义的匹配器:

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

实际上,您正在为您的匹配器定义一个构造函数 – 这是一个返回匹配器对象的函数。

在“启动”之前join。 基本匹配器在启动时加载。

你的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 &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(); 

它们显示了在样本testing中添加自定义匹配器的另一种方式,但是它的工作方式是在使用beforeEach进行每个testing之前重新创build匹配器。 这看起来很可怕,所以我想我会采用这种方法。

我今天遇到了同样的问题,事实certificate,添加自定义匹配器并不难。 自定义匹配器的主要优点是在testing失败时可以返回有意义的消息。

所以这里是两个匹配器的代码, .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支持toBeGreaterThan和toBeLessThan。

 expect(myVariable).toBeGreaterThan(0); 

它只是合并在Jasmine GitHub主分支我的补丁添加您需要的匹配器:

添加toBeGreatThanOrEqual和toBeLessThanOrEqual匹配器

但我不知道在哪个发行版本中。 在此期间,您可以尝试使用我的提交代码在您当地的Jasmine副本。

我build议使用这个茉莉花插件: https : //github.com/JamieMason/Jasmine-Matchers

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

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

所以,要回答这个问题,你可以这样做:

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