2012-05-28 16 views
17

Piszę test jednostki używając Jasmine w aplikacji internetowej przy użyciu BackboneJS.
Istnieje wiele przykładów pokazujących, w jaki sposób sprawdzić wartość w ten sposób:Jak sprawdzić, czy wartość jest liczbą całkowitą lub ciągiem w pliku jasmine.js?

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

Ale nie mogę znaleźć żadnych przykład sprawdzanie, czy atrybut czy jest liczba lub ciąg w JavaScript używając jaśminu.

Czy dokonanie takiej kontroli jest właściwe?
Jeśli tak, jaki jest właściwy sposób na jego wykonanie?

Przykład: chcę sprawdzić, czy id jest liczbą całkowitą> 0. Jak mogę to zrobić w Jasmine?

+0

Czy uważasz "123" za liczbę całkowitą lub za ciąg? ponieważ w rzeczywistości jest to ciąg reprezentujący liczbę całkowitą. – fguillen

Odpowiedz

8

chciałbym zrobić coś takiego:

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

strzeż się tego regex sprawdzi '' wadus12wadus "' – fguillen

+1

i złagodzić ten problem, użyj/^ \ d {1,} $/ – neXus

+0

Po prostu mówisz, dlaczego po prostu nie robisz '/ \ d + /'? Rodzaj nadmiernego użycia '{}' haha ​​ – Jay

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

Jeśli mamy na uwadze, że:

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

Szczerze mówiąc, nie wiem, co jest właściwa droga, ale napisze coś takiego:

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

Dla potomności, jednym z zadanych tutaj pytań jest sprawdzenie, czy wartość jest liczbą. Od jasmine docs:

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

OP dodał przykład: 'Chcę sprawdzić, czy identyfikator jest liczbą całkowitą> 0'. Ta odpowiedź nie sprawdza liczby NaN, zero, nieskończoności, ujemnej i zmiennoprzecinkowej. Z czasem: to może być najbardziej przereklamowana odpowiedź w historii, sądząc po liczbie wzlotów. –

1

Użyłem underscorejs do sprawdzenia tego rodzaju rzeczy:

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

Można spróbować:

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

Jeśli masz numer, który nie jest liczba całkowita, obcięcie jej powinno prowadzić do innej liczby, co spowoduje odpowiednią awarię testu.

Jeśli nie masz wsparcia dla ES6, możesz zamiast tego użyć podłogi.

Powiązane problemy