27

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

4

7 回答 7

82

对于后代,这里提出的问题之一是测试一个值是否是一个数字。来自茉莉花文档

expect(12).toEqual(jasmine.any(Number));
于 2014-01-21T21:21:01.167 回答
8

我会做这样的事情:

    describe("when instantiated", function() 
    {
        it("should exhibit attributes", function () 
        {  
            .....
            expect(this.task.get("id")).toMatch(/\d{1,}/);
            .....
        });
    });
于 2012-05-28T09:45:14.663 回答
5

老实说,我不知道正确的方法是什么,但我会写这样的东西:

 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);
 });
于 2012-05-29T02:04:03.837 回答
3
expect( this.task.get("id") ).toBeGreaterThan( 0 );

如果我们考虑到:

expect( 1 ).toBeGreaterThan( 0 );   // => true
expect( "1" ).toBeGreaterThan( 0 ); // => true
expect( "a" ).toBeGreaterThan( 0 ); // => false
于 2012-05-28T17:56:26.570 回答
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,你可以使用 floor 代替。

于 2015-07-07T19:36:28.167 回答
1

我用underscorejs来检查这种事情:

it('should be a number', function() {
  expect(_.isNumber(this.task.get('id'))).toBeTruthy();
});
于 2014-04-17T16:58:42.007 回答
0

这将确保结果是一个数字。

it("expect the result to be a number", () => {
    expect(5).not.toBeNaN;
});

虽然这将确保结果不是数字

it("expect the result not to be a number", () => {
    expect('five').toBeNaN;
});

这确保数字大于或等于零

it("expect the result to be >=0", () => {
    expect(5).toBeGreaterThanOrEqual(0)
});
于 2022-01-08T16:50:48.063 回答