我如何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 & 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)