2013-10-02 18 views
5

Sto cercando di ottenere il funzionamento di TypeScript, moka e chai quando si esegue sulla riga di comando. Sto usando TypeScript versione 0.9.1.1.Esecuzione di un test di moka utilizzando Chai e TypeScript dalla riga di comando

devo CalculatorTest.ts:

/// <reference path="../definitions/mocha.d.ts" /> 
/// <reference path="../definitions/chai.d.ts" /> 

// import chai = require('node_modules/chai/chai'); 

var expect = chai.expect; 

describe("Calculator",() => { 
    var calc: Calculator; 

    beforeEach(() => { 
     calc = new Calculator(); 
    }); 

    describe("Add",() => { 
     it("should have correct results",() => { 

      calc.add(1); 
      calc.add(2); 

      expect(calc.current()).to.equal(3); 
     }); 

     it("this test should fail",() => { 
      expect(calc.current()).to.equal(10000); 
     }); 
    }) 
}); 

ho anche un file Calculator.js separato.

posso fare funzionare questa bella nel browser con la pagina:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Mocha Calculator Tests</title> 
    <link rel="stylesheet" href="scripts/node_modules/mocha/mocha.css" /> 
</head> 
<body> 
    <div id="mocha"></div> 
    <script src="scripts/node_modules/mocha/mocha.js"></script> 
    <script src="scripts/node_modules/chai/chai.js"></script> 
    <script>mocha.setup('bdd')</script> 
    <script src="scripts/Calculator.js"></script> 
    <script src="scripts/test/CalculatorTest.js"></script> 
    <script> 
     mocha.checkLeaks(); 
     mocha.globals(['jQuery']); 
     mocha.run(); 
    </script> 
</body> 
</html> 

Tuttavia, se si tenta di eseguire sulla riga di comando con

./node_modules/mocha/bin/mocha 

o

./node_modules/mocha/bin/mocha -r chai 

Ho ricevuto l'errore:

C:\javascript\Test\Test\scripts\test\CalculatorTest. 
js:4 
var expect = chai.expect; 
      ^
ReferenceError: chai is not defined 
    at Object.<anonymous> (C:\javascript\Test\Test\scripts\test\CalculatorTest.js:4:14) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 

C'è un modo per cercare l'oggetto chai?

Aggiornamento: Ecco maggiori informazioni su ciò che accade quando l'importazione non sia commentata:

Se cambio i chai.d.ts da DefinitelyTyped in modo che parta

declare module 'chai' { 

e cambiare la parte superiore poche righe nel file:

/// <reference path="../definitions/mocha.d.ts" /> 

import chai = require('../definitions/chai'); 

var expect = chai.expect; 

quindi il file viene compilato correttamente.

Tuttavia, quando ho eseguito dalla riga di comando, ottengo

% ./node_modules/mocha/bin/mocha 

C:\javascript\Test\Test\scripts\test\CalculatorTest.js:2 
define(["require", "exports", '../definitions/chai'], function(require, export 
^ 
ReferenceError: define is not defined 
    at Object.<anonymous> (C:\javascript\Test\Test\scripts\test\CalculatorTest.js:2:1) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 

Il file JavaScript generato inizia con:

/// <reference path="../definitions/mocha.d.ts" /> 
define(["require", "exports", '../definitions/chai'], function(require, exports, __chai__) { 
    var chai = __chai__; 

credo che dattiloscritto sta generando un modulo qui, dal momento che ho la dichiarazione di importazione.

risposta

5

Suppongo che tu stia utilizzando chai.d.ts da DefinitelyTyped.

Poiché si utilizza chai come modulo esterno (tramite importazioni), è necessario modificare il file .d.ts. Cambia

declare module chai {

a

declare module 'chai' {

Poi si può scrivere questo e tutto dovrebbe funzionare:

import chai = require('chai'); 

Se si desidera utilizzare questo in una pagina web, è' Dovrò usare RequireJS e compilare in modo diverso per il nodo (--module commonjs) che per il web (--module amd).

+0

Grazie, che mi ha fatto un ulteriore passo avanti, ma si veda la questione aggiornato. –

+0

È necessario compilare con '--module commonjs', non' --module amd' –

+1

Vorrei evitare l'aggiornamento del file chai.d.ts. Nella maggior parte dei progetti, i file di definizione di TypeScript vengono gestiti tramite qualcosa come '' tsd'' (al giorno d'oggi '' typings''). Pertanto, è probabile che altri membri del progetto aggiornino questo manualmente su ogni repo pull. Invece, consiglierei di mantenere uno ' .d.ts'' separato all'interno del repository e definire eventuali moduli aggiuntivi. Ciò impedirà la gestione manuale delle dipendenze su nuovi repo pull. Naturalmente è possibile aggiungere il codice da questa risposta, che è perfettamente a posto. – Nicky

0

Prendete il mio esempio per una configurazione completa per corsa dattiloscritto mette alla prova con la moka e Chai:

test.ts

import { expect } from 'chai'; 
import 'ts-node'; 
import 'mocha'; 

describe('#MyDummyTest',() => { 
    it('sould convert be true!',() => { 
     const result = true; 
     expect(result).to.equal(true); 
    }); 
}); 

packaje.json

"devDependencies": { 
    "@angular/cli": "^1.4.9", 
    "@types/chai": "^4.0.4", 
    "@types/mocha": "^2.2.44", 
    "chai": "^4.1.2", 
    "mocha": "^3.5.3", 
    "ts-node": "^3.3.0", 
    "typings": "^2.1.1" 
}, 
"scripts": { 
    "test": "mocha --compilers ts:ts-node/register,tsx:ts-node/register --reporter spec test/test.ts" 
    "test-w": "mocha --compilers ts:ts-node/register,tsx:ts-node/register --watch --reporter spec test/test.ts" 
} 

tsconfig.j figlio

"compilerOptions": { 
    "types": [ "mocha", "chai" ], 
    "typeRoots": [ 
     "./node_modules/@types" 
    ] 
} 

Questo elenco potrebbe aiutare anche voi:

npm install -g ts-node 
    npm install -g typescript 

Install type definitions: 
    npm install typings -g 
    npm install typings --save-dev 

Install type definitions: 
    npm install @types/chai 
    npm install @types/mocha --save-dev 

Install type definitions: 
    typings install dt~mocha --global --save 
    typings install npm~chai --save 

Install reporter: 
    npm install ts-node --save-dev 

Install ts mocha: 
    npm i -g ts-mocha 
Problemi correlati