Академический Документы
Профессиональный Документы
Культура Документы
Y así crearon Jest. Se trata de un framework para Unit Testing basado en Jasmine.
- Ejecuta los tests en una implementación falsa del DOM (usando JsDOM) para poder
correr los tests desde la consola sin necesidad de hacerlo en el navegador.
Instalación
Para poder testear código ES6 debemos de tener instalado Babel global
npm i -g babel
Después, instalamos el cliente de Jest para poder ejecutar los test desde la terminal
npm i -g jest-cli
Configuración
rootDir: es el folder donde jest buscará los tests y los módulos por default. También es
la carpeta que contiene el package.json por defecto.
testFileExtensions: definimos los tipos de archivos en los que pueden estar escritos los
test.
Jest en acción
-El input debe existir y estar definido como elemento del DOM.
-Si presionamos enter para crear un ítem pero el input esta vacío, no debería de crear
elemento alguno.
-La cantidad de ítems debería ser igual que la cantidad de ítems en el state.
jest.dontMock('../TODO.jsx');
describe('TODO', () => {
//definimos el componente a Testear
const TODO = require('../TODO.jsx');
const TodoComponent = TestUtils.renderIntoDocument(<TODO
defaultText="new task"/>);
//con TestUtils renderizamos un componente al cual le podemos
pasar datos
it("El componente debe estar definido", () => {
expect(TestUtils.isCompositeComponent(TodoComponent)).toBeTruthy();
});
});
Usamos jest.dontMock(‘../TODO.jsx’); porque Jest hace mock de cada componente.
En este caso estamos usando el componente real.
Caso 2: El input debe existir y estar definido como elemento del DOM
Para poder encontrar elementos del DOM podemos usar los siguientes métodos
deTestUtils:
scryRenderedDOMComponentsWithTag: es igual
que findRenderedDOMComponentsWithTag, pero retorna un array con todos los
elementos con este tag.
scryRenderedDOMComponentsWithClass: Es igual
que findRenderedDOMComponentsWithClass pero en este caso retorna un array con
todos los elementos con esta clase
it('El input debe existir y estar definido como elemento del DOM',
() => {
const input =
TestUtils.findRenderedDOMComponentWithTag(TodoComponent, 'input');
expect(TestUtils.isDOMComponent(input)).toBeTruthy();
});
Puede ser click, keyDown, chagne, hover, etc. Simulate recibe como parámetros el
elemento del DOM al que queramos ejercerle la acción y, de manera
opcional, eventData. Este caso se vería así:
it('al enviar el formulario se deberia de crear un item', () => {
//definimos los componentes del DOM
const input =
TestUtils.findRenderedDOMComponentWithTag(TodoComponent, 'input');
//Simulamos cambio en el input
TestUtils.Simulate.change(input);
//Simulamos el keDown de la letra #13 de enter
TestUtils.Simulate.keyDown(input, {key: "Enter", keyCode: 13, which:
13});
//al crear un item, deberia de renderizarse otro elemento de la
lista, por ende,
//aumentar el largo del array de este
const items =
TestUtils.scryRenderedDOMComponentsWithClass(TodoComponent, 'TODO-
Item');
//al crear una tarea, verificamos que el largo sea mayor que cero
expect(items.length > 0).toBeTruthy();
});
Caso 4: Al dar clic sobre el ícono de borrado de un ítem, este debería ser
eliminado
Caso 5: Si presionamos enter para crear un ítem, pero el input esta vacío,
no debería crear elemento alguno
Para este caso verificamos que, luego de haber intentado crear un ítem con el input
vacío, el largo de los ítems sea igual a cero.
it('Si al enviar el formulario este esta vacio no deberia crear la
tarea', () => {
const Todo = TestUtils.renderIntoDocument(<TODO defaultText=""/>);
const input = TestUtils.findRenderedDOMComponentWithTag(Todo,
'input');
TestUtils.Simulate.change(input);
//Simulamos el keDown de la letra #13 de enter
TestUtils.Simulate.keyDown(input, {key: "Enter", keyCode: 13, which:
13});
const items = TestUtils.scryRenderedDOMComponentsWithClass(Todo,
'TODO-Item');
//al crear una tarea, verificamos que el largo sea mayor que cero
expect(items.length === 0).toBeTruthy();
});