我正在使用BackboneJS在Web应用程序中使用Jasmine编写单元测试 有很多示例向您展示如何以这种方式检查值:
it("should set the id property to default value", function()
{
expect(this.task.get("id")).toEqual(null);
});
但我找不到任何使用Jasmine检查Javascript中的属性是否为数字或字符串的示例。
这样检查是否合适?
如果是的话,制作它的正确方法是什么?
示例:我想检查id
是否为整数> 0.我怎样才能在Jasmine中制作它?
答案 0 :(得分:68)
对于子孙后代,这里提出的一个问题是测试一个值是否为数字。来自jasmine docs:
expect(12).toEqual(jasmine.any(Number));
答案 1 :(得分:8)
我会做这样的事情:
describe("when instantiated", function()
{
it("should exhibit attributes", function ()
{
.....
expect(this.task.get("id")).toMatch(/\d{1,}/);
.....
});
});
答案 2 :(得分:4)
老实说,我不知道正确的方法是什么,但我会写出类似的东西:
it("should set the id property to default value", function () {
var id = this.task.get("id");
expect(typeof id).toEqual('number');
expect(id).toBeGreaterThan(0);
});
答案 3 :(得分:3)
expect( this.task.get("id") ).toBeGreaterThan( 0 );
如果我们考虑到:
expect( 1 ).toBeGreaterThan( 0 ); // => true
expect( "1" ).toBeGreaterThan( 0 ); // => true
expect( "a" ).toBeGreaterThan( 0 ); // => false
答案 4 :(得分:3)
您可以尝试:
it('should be integer', function()
{
var id = this.task.get("id");
expect(id).toEqual(jasmine.any(Number));
expect(id).toBeGreaterThan(0);
expect(Math.trunc(id)).toEqual(id);
});
如果您的数字不是整数,则截断它会导致数字不同,这会导致相应的测试失败。
如果您不支持ES6,则可以改用楼层。
答案 5 :(得分:1)
我已经使用underscorejs来检查这类事情:
it('should be a number', function() {
expect(_.isNumber(this.task.get('id'))).toBeTruthy();
});