Categorías: buenas practicas desarrollo javascript typescript

Cómo hacer tests en TypeScript en Visual Studio

Como hemos hablado con anterioridad TypeScript es una solución muy efectiva para poder hacer aplicaciones escalables y estructuradas con JavaScript. Para completar todo este ciclo, voy a enseñaros cómo hacer test unitarios dentro de nuestros desarrollos en TypeScript.

Para poder hacer testing dentro de Visual Studio tenemos dos opciones:

  • Utilizando ReSharper. Por si alguien no conoce este plugin, es un complemento para ayudar a refactorizar, categorizar y «facilitar» el desarrollo. Tiene un inconveniente: es de pago.
  • Instalarle dos plugin totalmente gratuitos. Estos son: Chutzpah Test Adapter for the Test Explorer y  Chutzpah Test Runner Context Extensión

 

 

 

Estas dos extensiones hacen que cuando escribamos un test en JavaScript, lo podamos ejecutar desde el propio Test Explorer que viene en Visual Studio o bien desde el propio fichero donde está definido. Pero para poder ejecutar el test, en primer lugar tenemos que seleccionar el framework de Test a utilizar. Hay multitud de ellos: Jasmine, QUnit, Mocha, etc. En este caso vamos a utilizar Jasmine (aunque el ejemplo es válido para cualquiera de ellos).

Manos a la obra

En primer lugar, abrimos Visual Studio, creamos un Proyecto Web e instalamos los siguientes paquetes Nuget:

A continuación, nos creamos una clase Persona dentro de Typescript con la siguiente estructura:

class Persona {
    nombre: string;
    apellidos: string;
    constructor(nombre: string, apellidos: string) {
        this.nombre = nombre;
        this.apellidos = apellidos;
    }

    FullName():string {
        return this.nombre + " " + this.apellidos;
    }
} 

En base a esta clase, escribimos un test para comprobar que el método FullName nos devuelva los valores adecuados. Para ello, en primer lugar crearemos una carpeta de Test y en la misma creamos un fichero TypeScript con los test que vayamos a escribir. Antes de empezar a realizar los test, tendremos que añadir los tipos de nuestro FrameWork JavaScript. En nuestro caso Jasmine. De esta forma, nuestra clase quedará de la siguiente manera:

/// <reference path="../typings/jasmine/jasmine.d.ts" />
/// <reference path="../persona.ts" />
describe("Person FullName", () => {
   var person: Persona;
    beforeEach(() => {
        person = new Persona("Adrian","Diaz");
        
    });
    it("should concatenate first and last names", () => {
        expect(person.FullName()).toBe("Adrian Diaz");
    });
}); 

A continuación, vamos dentro de las Vistas de la aplicación Views/Jasmine/SpecRunner.cshtml y añadimos la referencia del fichero js que vamos a utilizar. Ejemplo:

  <script type="text/javascript" src="/Scripts/persona.js"></script>

Si todo ha ido de forma correcta, mostramos la ventana de Test y nuestro test estará dentro del Test Explorer.

En algunos entornos es posible que los test se muestren duplicados. Para ello, hay que añadir un fichero chutzpah.json y añadirle una configuración similar a la siguiente:


    "Compile": {
        "Mode": "External",
        "Extensions": [".ts"],
        "ExtensionsWithNoOutput": [".d.ts"]
    },
    "References": [
        { "Path": "scripts/jasmine.js" },
        { "Path": "scripts/typings/" },
        {
            "Path": "app/", "Exclude":  "*/app/test/*"
        }
    ],
    "Tests": [
        { "Path": "app/test", "Include":  "*.ts" }
    ]
}

Conclusión

Typescript tiene todo lo que necesitamos para poder utilizarlo en aplicaciones de gran envergadura. Es una lenguaje muy potente y que combina lo mejor de un lenguaje servidor como es C# con la potencia y flexibilidad de un lenguaje de cliente como es el JavaScript. En cuanto a los test, no deben de ser opcional y hay que dotarlo en nuestras aplicaciones para asegurar el mantenimiento de las mismas.

Compartir
Publicado por
Adrián Díaz

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)