2012-05-28 34 views
17

Estoy escribiendo una prueba de unidad usando Jasmine en una aplicación web usando BackboneJS.
Hay una gran cantidad de ejemplos que muestran cómo comprobar un valor de esta manera:¿Cómo comprobar si un valor es un número entero o una cadena en jasmine.js?

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

Pero no puedo encontrar ningún ejemplo de comprobar si un atributo si es número o una cadena en JavaScript utilizando el jazmín.

¿Es apropiado hacer un cheque como este?
En caso afirmativo, ¿cuál es la forma correcta de hacerlo?

Ejemplo: Quiero comprobar si el id es un número entero> 0. ¿Cómo puedo hacerlo en Jasmine?

+0

¿Considera '" 123 "' como un entero o como una cadena? porque en realidad es la representación de Cadena de un Entero. – fguillen

Respuesta

8

me gustaría hacer algo como esto:

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

tenga en cuenta que esta expresión regular validará '" wadus12wadus "' – fguillen

+1

y para mitigar ese problema, use/^ \ d {1,} $/ – neXus

+0

Solo diciendo, ¿por qué no acaba de hacer '/ \ d + /'? Tipo de uso excesivo '{}' haha ​​ – Jay

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

Si tenemos en cuenta que:

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

Honestamente, no sé lo que es la forma correcta, pero escribirá algo así:

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

Para la posteridad, una de las preguntas planteadas aquí es probar si un valor es un número. Desde el jasmine docs:

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

OP agregó un ejemplo: 'Quiero comprobar si el ID es un entero> 0'. Esta respuesta no verifica los números de NaN, cero, infinito, negativo y coma flotante. Con el tiempo: esta podría ser la respuesta más sobrevalorada jamás, a juzgar por el número de ups. –

1

He usado underscorejs para comprobar este tipo de cosas:

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

Usted puede tratar de:

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

Si usted tiene un número que no es una entero, truncarlo debe conducir a un número que es diferente, lo que provocará el error de prueba apropiado.

Si no tiene soporte para ES6, puede usar floor en su lugar.

Cuestiones relacionadas