Как проверить, является ли значение целым числом или строкой в ​​jasmine.js? - программирование
Подтвердить что ты не робот

Как проверить, является ли значение целым числом или строкой в ​​jasmine.js?

Я пишу unit test с помощью Jasmine в веб-приложении с помощью BackboneJS.
Существует множество примеров, показывающих, как проверить значение таким образом:

        it("should set the id property to default value", function()
        {
            expect(this.task.get("id")).toEqual(null);
        });

Но я не могу найти пример, проверяющий, является ли атрибут ли число или строка в Javascript, используя Jasmine.

Уместно ли сделать такую ​​проверку?
Если да, то каков правильный способ сделать это?

Пример: Я хочу проверить, является ли id целое число > 0. Как я могу сделать это в Jasmine?

4b9b3361

Ответ 1

Я бы сделал что-то вроде этого:

    describe("when instantiated", function() 
    {
        it("should exhibit attributes", function () 
        {  
            .....
            expect(this.task.get("id")).toMatch(/\d{1,}/);
            .....
        });
    });

Ответ 2

Для потомков один из вопросов, заданных здесь, состоит в том, чтобы проверить, является ли значение числом. Из jasmine docs:

expect(12).toEqual(jasmine.any(Number));

Ответ 3

Честно говоря, я не знаю, каков правильный путь, но я напишу что-то вроде этого:

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

Ответ 4

expect( this.task.get("id") ).toBeGreaterThan( 0 );

Если учесть, что:

expect( 1 ).toBeGreaterThan( 0 );   // => true
expect( "1" ).toBeGreaterThan( 0 ); // => true
expect( "a" ).toBeGreaterThan( 0 ); // => false

Ответ 5

Я использовал underscorejs, чтобы проверить такие вещи:

it('should be a number', function() {
  expect(_.isNumber(this.task.get('id'))).toBeTruthy();
});

Ответ 6

Вы можете попробовать:

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, вы можете использовать слово вместо этого.