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.
Grazie, che mi ha fatto un ulteriore passo avanti, ma si veda la questione aggiornato. –
È necessario compilare con '--module commonjs', non' --module amd' –
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