-
Notifications
You must be signed in to change notification settings - Fork 1
/
box.test.js
96 lines (70 loc) · 2.97 KB
/
box.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const { expect } = require('@jest/globals');
// box configurado como paquete
const factory = require('../box');
test('Creo la caja usando su factoria', () => {
expect(factory.singletonBox.getBox().name).toBe("Rick's box");
});
test('Factoria devuelve siempre la misma caja (singleton)', () => {
let box_primer = factory.singletonBox.getBox();
let box_post = factory.singletonBox.getBox();
expect(box_primer === box_post).toBe(true);
// TO_BE_INSTANCE_OF
function Box() {
this.name = "Rick's box";
this.mrMeeseeks = null;
}
let box_mocked = new Box();
expect(box_primer).not.toBeInstanceOf(Box);
expect(box_primer === box_mocked).toBe(false);
});
/**
* SCOPING
*
* SETUP y TEARDOWN
*/
describe('scoping de beforeEach', () => {
let box = null;
// SETUP
beforeEach( () => {
// de poco sirve porque el closure ya se ha ejecutado
box = factory.singletonBox.getBox();
} );
test('shadowing de variable messageOnCreate', () => {
// OBJECT TO_HAVE_PROPERTY
let meeseeks = box.createMrMeeseeks();
expect(meeseeks).toHaveProperty('messageOnCreate');
// messageOnCreate existe en el prototype de meeseeks
// no en el objeto actual
expect(meeseeks.hasOwnProperty('messageOnCreate')).toBeFalsy();
// shadowing de variable: ahora existe en meeseeks
meeseeks.messageOnCreate = "Caaaan dooooo!!";
expect(meeseeks.hasOwnProperty('messageOnCreate')).toBeTruthy();
// EXPECT.STRING_MATCHING
// obtengo el meeseeks proto y compruebo que su mensaje
// onCreate no ha cambiado: shadowing de la variable messageOnCreate
let proto = box.getProtoMeeseks();
expect(proto).toHaveProperty('messageOnCreate');
expect(proto.messageOnCreate).toEqual(expect.stringMatching("I'm Mr Meeseeks! Look at meeee!"));
});
test('Presionando boton de la caja se añade meeseeks a la realidad', () => {
let reality = [];
box.pressButton(reality);
// ARRAYS TO_HAVE_LENGHT
// un meeseeks ha comenzado a existir
expect(reality).toHaveLength(1);
// OBJECT TO_HAVE_PROPERTY
// el nuevo objeto no es nulo y es un meeseek
expect(reality[0]).toHaveProperty('messageOnCreate', "I'm Mr Meeseeks! Look at meeee!");
// toEqual no asciende por la cadena de prototipos buscando las propiedades del objeto
// toEqual recursively checks every field of an object or array.
console.log(reality[0]); // MrMeeseeks {}
expect(reality[0]).not.toEqual(
{ messageOnCreate: "I'm Mr Meeseeks! Look at meeee!",
messageOnRequest: ["Oooh yeah! Can do!", "Yes sireee!", "Oh, yeah!, Yes, ma'am!"]
})
let meeseeks = box.getProtoMeeseks();
expect(reality[0]).toEqual(expect.objectContaining(meeseeks));
// toBeInstanceOf no puedo utilizarlo porque no tengo acceso
// a la funcion constructora MrMeeseeks
})
})