├── .gitignore ├── app └── spiderman.js ├── package.json ├── test └── spiderman.test.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules -------------------------------------------------------------------------------- /app/spiderman.js: -------------------------------------------------------------------------------- 1 | class Spiderman{ 2 | constructor (name, age, actor, movies, studio){ 3 | this.name = name 4 | this.age = age 5 | this.actor = actor 6 | this.movies = movies 7 | this.studio = studio 8 | } 9 | getInfo(){ 10 | return `Hey, I'm ${this.actor} from ${this.studio} studio` 11 | } 12 | } 13 | 14 | module.exports = Spiderman -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spiderverse", 3 | "version": "1.0.0", 4 | "description": "Diseño de Software con TDD", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node ./node_modules/jest/bin/jest" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/RodolfoBaume/spiderverse.git" 12 | }, 13 | "author": "RodolfoBaume", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/RodolfoBaume/spiderverse/issues" 17 | }, 18 | "homepage": "https://github.com/RodolfoBaume/spiderverse#readme", 19 | "devDependencies": { 20 | "jest": "^27.5.1" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /test/spiderman.test.js: -------------------------------------------------------------------------------- 1 | const Spiderman = require('./../app/spiderman') 2 | 3 | describe("Unit Test for Spiderman class", () => { 4 | test('1) Create an spiderman object', () => { 5 | // Aquí escribimos el código que queremos usar tal cuál 6 | // Quiero poder instanciar un objeto Spiderman con esta información 7 | const andrewGarfield = new Spiderman("Spiderman Sony", 31, "Andrew Garfield", 2, "Sony") 8 | 9 | // Validamos que este código funcione de la forma esperada 10 | expect(andrewGarfield.name).toBe("Spiderman Sony") 11 | expect(andrewGarfield.age).toBe(31) 12 | expect(andrewGarfield.actor).toBe("Andrew Garfield") 13 | expect(andrewGarfield.movies).toBe(2) 14 | expect(andrewGarfield.studio).toBe("Sony") 15 | }); 16 | test('2) Use the method getInfo()', () => { 17 | const tomHolland = new Spiderman("Spidermna Marvel", 25, "Tom Holland", 5, "Marvel") 18 | expect(tomHolland.getInfo()).toBe("Hey, I'm Tom Holland from Marvel studio") 19 | }); 20 | }) 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # spiderverse 2 | 3 | ## Diseño de Software con TDD 4 | 5 | El TDD o Test-Driven Development (desarrollo dirigido por tests) es una práctica de programación que consiste en escribir primero las pruebas (generalmente unitarias), después escribir el código fuente que pase la prueba satisfactoriamente y, por último, refactorizar el código escrito. 6 | 7 | ![image](https://user-images.githubusercontent.com/74028526/166083432-4f161b5b-784b-443a-bba8-cd3e1bc3cb3f.png) 8 | 9 | 10 | 11 | Implementar la clase spiderman que tenga como atributos: nombre, edad, actor que lo interpretó, número de películas en las que apareció, estudio de cine. Y utilizar el método que nos regrese la siguiente información: nombre y estudio al que pertenece el spiderman instanciado. 12 | 13 | [![](https://mermaid.ink/img/pako:eNptkDEOwyAMRa-CPLVqTsDcDp2zsljYpEgBIjCVqih3L2nTTniy33-D7RVsIgYNdsZSrh6njMFE1epD1Lh44hwwfuF_VFpdIgbuYJy61ErKHR7S03PpBEUq-dQJJpZ7dOl0hgHCTj21A9bdNCAPbkuBbi2xwzqLARO3ptaFUPhGvu0B2uFceACsksZXtKAlV_5Jxx8Oa3sD2glhDg)](https://mermaid-js.github.io/mermaid-live-editor/edit#pako:eNptkDEOwyAMRa-CPLVqTsDcDp2zsljYpEgBIjCVqih3L2nTTniy33-D7RVsIgYNdsZSrh6njMFE1epD1Lh44hwwfuF_VFpdIgbuYJy61ErKHR7S03PpBEUq-dQJJpZ7dOl0hgHCTj21A9bdNCAPbkuBbi2xwzqLARO3ptaFUPhGvu0B2uFceACsksZXtKAlV_5Jxx8Oa3sD2glhDg) 14 | 15 | ~~~ 16 | class Spiderman{ 17 | constructor (name, age, actor, movies, studio){ 18 | this.name = name 19 | this.age = age 20 | this.actor = actor 21 | this.movies = movies 22 | this.studio = studio 23 | } 24 | getInfo(){ 25 | return `Hey, I'm ${this.actor} from ${this.studio} studio` 26 | } 27 | } 28 | 29 | module.exports = Spiderman 30 | ~~~ 31 | 32 | Escribir las puebas unitarias 33 | ~~~ 34 | const Spiderman = require('./../app/spiderman') 35 | 36 | describe("Unit Test for Spiderman class", () => { 37 | test('1) Create an spiderman object', () => { 38 | // Aquí escribimos el código que queremos usar tal cuál 39 | // Quiero poder instanciar un objeto Spiderman con esta información 40 | const andrewGarfield = new Spiderman("Spiderman Sony", 31, "Andrew Garfield", 2, "Sony") 41 | 42 | // Validamos que este código funcione de la forma esperada 43 | expect(andrewGarfield.name).toBe("Spiderman Sony") 44 | expect(andrewGarfield.age).toBe(31) 45 | expect(andrewGarfield.actor).toBe("Andrew Garfield") 46 | expect(andrewGarfield.movies).toBe(2) 47 | expect(andrewGarfield.studio).toBe("Sony") 48 | }); 49 | test('2) Use the method getInfo()', () => { 50 | const tomHolland = new Spiderman("Spidermna Marvel", 25, "Tom Holland", 5, "Marvel") 51 | expect(tomHolland.getInfo()).toBe("Hey, I'm Tom Holland from Marvel studio") 52 | }); 53 | }) 54 | ~~~ 55 | 56 | Un refactor se aplica solo cuando se tiene una prueba de respaldo, que indicará que mejoras al código no rompen el comportamiento necesario. 57 | 58 | --------------------------------------------------------------------------------