<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Javascript on The Flip Flop Developer</title>
    <link>https://cristiansuarez.dev/categories/javascript/</link>
    <description>Recent content in Javascript on The Flip Flop Developer</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>es</language>
    <lastBuildDate>Sat, 23 Jan 2021 09:01:14 +0000</lastBuildDate><atom:link href="https://cristiansuarez.dev/categories/javascript/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Testear módulos</title>
      <link>https://cristiansuarez.dev/javascript/testear-modulos/</link>
      <pubDate>Sat, 23 Jan 2021 09:01:14 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/testear-modulos/</guid>
      <description>Vamos a probar el modulo que hemos sacado en la parte anterior del juego saberganar.
const saberganarQuestionNavigator = require(&amp;#39;../src/questionNavigator&amp;#39;); describe(&amp;#39;question navigator&amp;#39;, function () { let questions, navigator; beforeEach(function () { questions = [ { id: 1, question: &amp;#34;¿De que colo es el caballo blanco de santiago?&amp;#34;, answers: [ {id: 0, answer: &amp;#34;Es un unicornio, no un caballo&amp;#34;, isCorrect: false, idQuestion: 1}, {id: 1, answer: &amp;#34;Verde&amp;#34;, isCorrect: false, idQuestion: 1}, {id: 2, answer: &amp;#34;Blanco&amp;#34;, isCorrect: true, idQuestion: 1} ] }, { id: 2, question: &amp;#34;¿Como sale un perro de un tanque de agua?</description>
    </item>
    
    <item>
      <title>Poner siempre llaves y return en las funciones</title>
      <link>https://cristiansuarez.dev/javascript/poner-siempre-llaves-y-return-en-las-funciones/</link>
      <pubDate>Sat, 02 Jan 2021 18:24:26 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/poner-siempre-llaves-y-return-en-las-funciones/</guid>
      <description>Ejemplo sobre porque es relevante poner las llaves y el return en javascript cuando definimos una función.
// returns: undefined // explanation: an empty block with an implicit return ((name) =&amp;gt; {})() // returns: &amp;#39;Hi Jess&amp;#39; // explanation: no block means implicit return ((name) =&amp;gt; &amp;#39;Hi &amp;#39; + name)(&amp;#39;Jess&amp;#39;) // returns: undefined // explanation: explicit return required inside block, but is missing. ((name) =&amp;gt; {&amp;#39;Hi &amp;#39; + name})(&amp;#39;Jess&amp;#39;) // returns: &amp;#39;Hi Jess&amp;#39; // explanation: explicit return in block exists ((name) =&amp;gt; {return &amp;#39;Hi &amp;#39; + name})(&amp;#39;Jess&amp;#39;) // returns: undefined // explanation: a block containing a single label.</description>
    </item>
    
    <item>
      <title>Extraer objeto en JavaScript</title>
      <link>https://cristiansuarez.dev/javascript/extraer-objeto-en-javascript/</link>
      <pubDate>Sat, 30 Jun 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/extraer-objeto-en-javascript/</guid>
      <description>Vamos a ver como extraer un objeto en JavaScript en su versión de ECMAScript 5. Partimos de un fichero donde tenemos todas las funcionalidades y vemos que una de ellas es claramente un objeto que podemos extraer.
// main.js function application(){ // {...} let actualQuestionIndex = 0; function isThereMoreQuestions() { return actualQuestionIndex &amp;lt; questions.length -1; } function getQuestion() { return questions[actualQuestionIndex]; } function goToNextQuestion() { if (isThereMoreQuestions()) { actualQuestionIndex++; } } function resetQuestions() { actualQuestionIndex = 0; } // {.</description>
    </item>
    
    <item>
      <title>Código reutilizable</title>
      <link>https://cristiansuarez.dev/javascript/codigo-reutilizable/</link>
      <pubDate>Tue, 05 Jun 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/codigo-reutilizable/</guid>
      <description>El objetivo de un codigo es que sea mantenible, no reutilizable. Rara vez reutilizamos el codigo, este enfoque es muy de los años ochenta.
Cuando trabajamos es mejor si lo hacemos con objetos propios de nuestro dominio. En vez de usar objetos del lenguaje, como arrays o strings.</description>
    </item>
    
    <item>
      <title>Value object</title>
      <link>https://cristiansuarez.dev/javascript/value-object/</link>
      <pubDate>Mon, 04 Jun 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/value-object/</guid>
      <description>Cuando llamo al then devuelve una nueva promesa
Patron value object, dos objetos que son el mismo tipo pero que varian en el contenido [&amp;hellip;]
Si tenemos que modificar variables de estado del objeto esto no es un value object, cuando esto ocurre devolvemos un objeto nuevo. Esto son objetos inmutables como ejemplos tenemos los strigns
En un value object un objeto es igual a otro si ambos tienen el mismo contenido.</description>
    </item>
    
    <item>
      <title>Promesas</title>
      <link>https://cristiansuarez.dev/javascript/promesas/</link>
      <pubDate>Wed, 30 May 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/promesas/</guid>
      <description>De donde vienen y porque surge la necesidad.
The callback hell, callbacks anidados unos dentro de otros sin parar es algo comun en javaScript
Es un objeto que se crea con el new que recibe como parametro un callback pero solo uno y este como parametros dos callbacks que son los casos de que la promesa termine bien y en caso de que ocurra un error.
Tienen dos metodos principales then() y catch() los cuales se ejecutan cuando la promesa termina de manera correcta o erronea respectivamente.</description>
    </item>
    
    <item>
      <title>Asincronía</title>
      <link>https://cristiansuarez.dev/javascript/asincronia/</link>
      <pubDate>Thu, 24 May 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/asincronia/</guid>
      <description>En algunas ocasiones tenemos que hacer un test y que este espere un tiempo hasta que una funcion termine, ya que esta es asincrona. Para ello tenemos la siguiente posible implementacion.
function it (theSubject, funct){ function doneCallback() { console.log(&amp;#39;done&amp;#39;); } try { if (funct.length &amp;gt;=1) { funct(doneCallback); } else { funct(); } console.log(theSubject); } catch (error) { throw theSubject + &amp;#39;:&amp;#39; + error; } } } it (&amp;#39;foo&amp;#39;, function(doneCallback){ var x = 1; cosole.</description>
    </item>
    
    <item>
      <title>Extraer un modulo, testearlo y sustituirlo por el anterior</title>
      <link>https://cristiansuarez.dev/javascript/extraer-un-modulo-testearlo-y-sustituirlo-por-el-anterior/</link>
      <pubDate>Mon, 21 May 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/extraer-un-modulo-testearlo-y-sustituirlo-por-el-anterior/</guid>
      <description>Duplicar el codigo en un nuevo objeto, exportar este si no lo estaba para que sea accesible desde fuera y comenzar el test. Una vez ya podemos testearlo hacer los test necesarios. Con ello podremos comenzar a cambiar el modulo y a hacer el refactor.
Esto es como se hacía en ES5
let saberganar = saberganar || {}; (function(namespace) { namespace.questionNavigator = function (question) { // all implementation code here } })(saberganar); comprobamos si nuestro namespace saberganar existe, si no partimos de uno vacio, y le añadimos a este nuestro modulo nuevo questionNavigator.</description>
    </item>
    
    <item>
      <title>Test con un explorador de verdad</title>
      <link>https://cristiansuarez.dev/javascript/test-con-un-explorador-de-verdad/</link>
      <pubDate>Sun, 20 May 2018 23:00:00 +0000</pubDate>
      
      <guid>https://cristiansuarez.dev/javascript/test-con-un-explorador-de-verdad/</guid>
      <description>Puedes ver como el explorador se abre y va haciendo clicks en los enlaces, etc. Test end2end, estos test son buenos cuando la aplicación a probar no es testable, probamos directamente la interfaz como si fueramos un usuario final. Pero por otra parte si en el futuro la interfaz cambia ya sea porque tiene otro ID el botón o ya no existe, los test dejaran de funcionar. Estos test se deben de usar solo como andamio, debido a su fragilidad debemos usarlo cuando no sea posible hacer test de otra forma y durante la fase de refactor hasta que tengamos un aplicacion testable.</description>
    </item>
    
  </channel>
</rss>
