這似乎在進口打字稿的常用方法防止被嘲笑模塊......假設我有寫在一個打字稿node.js的項目下面的產品代碼,我想測試:在使用Typescript進行Mocha測試時使用Mockery有訣竅嗎?
// host.ts
import http = require('http');
export class Host {
public start(port: number): http.Server {
return http.createServer().listen(port);
}
}
我有使用嘲笑(d.ts in pull request #3313)和摩卡以下單元測試:
import chai = require('chai');
import mockery = require('mockery');
import webserver = require('../hosting/host');
describe('host',(): void => {
describe('start()',(): void => {
before(() : void => {
mockery.enable();
});
after((): void => {
mockery.deregisterAll();
mockery.disable();
});
it('should create an http server',(): void => {
mockery.registerMock('http', {
Server: mocks.Server,
createServer: (app: any) : any => new mocks.Server(app)
});
var host: webserver.Host = new webserver.Host({ port: 111 });
var server: any = host.start();
chai.expect(server).is.instanceOf(mocks.Server);
});
});
});
module mocks {
'use strict';
export class Server {
app: any;
constructor(app: any) {
this.app = app;
}
}
}
的問題是,當import webserver = require('../hosting/host')
被稱爲在測試的模擬的功能不設置尚未並返回未嘲笑require('http')
。我試圖在Host.start
函數中嘗試var http = require('http')
,但是這會阻止將http.Server聲明爲返回值。
我應該如何着手在Mocks中使用Typescript進行單元測試?有更好的圖書館比嘲笑更好嗎?