我試圖讓TypeScript,mocha和chai在命令行上運行時一起工作。我正在使用TypeScript 0.9.1.1版本。使用Chai和TypeScript從命令行運行摩卡測試
我有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);
});
})
});
我也有一個單獨的Calculator.js文件。
我可以在瀏覽器的頁面運行此罰款:
<!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>
但是,如果我嘗試使用
./node_modules/mocha/bin/mocha
或
./node_modules/mocha/bin/mocha -r chai
在命令行中運行我收到錯誤:
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)
有什麼方法可以查找柴的對象嗎?
更新:這裏有當導入註釋掉會發生什麼的詳細信息:
如果我改變從DefinitelyTyped的chai.d.ts,使其開始
declare module 'chai' {
和更改頂部文件中幾行內容爲:
/// <reference path="../definitions/mocha.d.ts" />
import chai = require('../definitions/chai');
var expect = chai.expect;
然後文件成功編譯。
然而,當我在命令行中運行,我得到
% ./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)
生成的JavaScript文件開頭:
/// <reference path="../definitions/mocha.d.ts" />
define(["require", "exports", '../definitions/chai'], function(require, exports, __chai__) {
var chai = __chai__;
我相信,打字稿這裏生成模塊,因爲我有進口聲明。
謝謝,這讓我又進了一步,但看到更新的問題。 –
您需要使用'--module commonjs'編譯,而不是'--module amd' –
我建議不要更新chai.d.ts文件。在大多數項目中,TypeScript定義文件通過類似'tsd''(現在的''typings'')來管理。因此,其他項目成員可能會在每次回購時手動進行更新。相反,我建議你在你的倉庫中保存一個獨立的'.d.ts''並在那裏定義任何附加模塊。這將防止手動管理你對新的回購拉動的依賴。當然,你可以在這裏添加來自這個答案的代碼,這非常好。 –
Nicky