我正在尝试让TypeScript,mocha和chai在命令行上运行时协同工作。我正在使用TypeScript版本0.9.1.1。
我有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)
我有什么方法可以查看chai对象吗?
更新:以下是有关取消注释导入时会发生什么的更多信息:
如果我从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__;
我相信TypeScript正在这里生成一个模块,因为我有import语句。
答案 0 :(得分:5)
我假设您正在使用DefinitelyTyped中的chai.d.ts。
由于您使用chai作为外部模块(通过导入),因此您需要修改.d.ts文件。变化
declare module chai {
到
declare module 'chai' {
然后你可以写这个,一切都应该起作用:
import chai = require('chai');
如果要在网页中使用此功能,则必须使用RequireJS并对节点(--module commonjs
)进行不同的编译,而不是对网络(--module amd
)进行编译。
答案 1 :(得分:1)
以mocha和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.json 强>
"compilerOptions": {
"types": [ "mocha", "chai" ],
"typeRoots": [
"./node_modules/@types"
]
}
此列表也可能对您有所帮助:
npm install -g ts-node
npm install -g typescript
安装类型定义:
npm install typings -g
npm install typings --save-dev
安装类型定义:
npm install @types/chai
npm install @types/mocha --save-dev
安装类型定义:
typings install dt~mocha --global --save
typings install npm~chai --save
安装记者:
npm install ts-node --save-dev
安装ts mocha:
npm i -g ts-mocha