Last active
November 12, 2015 05:53
-
-
Save bitifet/2293f97cba5b2a784aa1 to your computer and use it in GitHub Desktop.
Jasmine templates
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // checkEquals (fn, tests) - Helper function to build equality tests with Jasmine. | |
| function checkEquals(fn, tests){ | |
| if (fn instanceof Array) { // Allow to specify as ["this", fn] if required. | |
| var target = fn[0]; // this | |
| fn = fn[1]; | |
| } else { // fn expected to be a single functin by default. | |
| var target = this; // Or any other arbitrary value. | |
| }; | |
| return function(){ | |
| tests.map(function(t){ | |
| // Each tests in form: [[argumentsArray], expectedResult]. | |
| var args = (t[0] instanceof Array) | |
| ? t[0] | |
| : [t[0]] // Single argument can be passed directly if non Array. | |
| ; | |
| var expected = t[1]; | |
| var actual = fn.apply(target,args); | |
| expect(actual).toEqual(expected); | |
| }); | |
| }; | |
| }; | |
| /*/ Example: | |
| describe('FizzBuzz', function() { | |
| it ('Known results check', checkEquals(fizzbuzz, [ | |
| [1, "1"], | |
| [2, "2"], | |
| [3, "fizz"], | |
| [4, "4"], | |
| [5, "buzz"], | |
| [6, "fizz"], | |
| [7, "7"], | |
| [8, "8"], | |
| [9, "fizz"], | |
| [10, "buzz"], | |
| [11, "11"], | |
| [12, "fizz"], | |
| [13, "13"], | |
| [14, "14"], | |
| [15, "fizzbuzz"], | |
| ])); | |
| }); | |
| function fizzbuzz(number){ | |
| var r = ""; | |
| (number % 3) || (r+="fizz"); | |
| (number % 5) || (r+="buzz"); | |
| r || (r = String(number)); | |
| return r; | |
| }; | |
| //*/ |
Author
Creo que no me has entendido, @jllado, o no vamos por el mismo sitio...
La función que publico no es un test, sino una herramienta para simplificarlos (o simplificar la especificación sobre la que se hace el test, que es decir lo mismo, pero me gusta más ;-)). Eso creo que lo has entendido, pero por si acaso lo puntualizo.
- Si el test tiene demasiados comportamientos para tu gusto, quítaselos. No pretendia decir que tengas que comprobar TODOS los casos posibles sino todo lo contrario: Precisamente con una funcionalidad mas compleja, aunque efectivamente te llevaria demasiado tiempo comprobar todos los casos, probablemente sí te interesará verificar mas casos. Típicamente los (o algunos de los) mas significativos (p. ej. unos cuantos "fizz", unos cuantos "buzz", unos cuantos "fizzbuzz" y unos cuantos numéricos, alguno de alrededor de los anteriores).
- No entiendo que quieres decir con que "el test no revela su intención". Si te fijas, es exactamente el mismo que hiciste tu, sólo que comprobando mas ítems del mismo caso y con menos verborrea. Pero el resultado es el mismo. Ejemplo (cambiando un ítem de la especificación para forzar un fallo):
PhantomJS 1.9.8 (Linux 0.0.0) FizzBuzz Known results check FAILED
Expected 'buzz' to equal 'buzzy_err'.
at /home/joanmi/prj/test/tdd/karma/test.js:19
PhantomJS 1.9.8 (Linux 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.041 secs / 0.001 secs)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Creo que te equivocas con esta aproximación por varios motivos: