如何在jasmine.js中检查值是整数还是字符串?

时间:2012-05-28 09:26:47

标签: jasmine

我正在使用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中制作它?

6 个答案:

答案 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();
});