我正在努力獲得使用Jasmine測試的一些Typescript類。我創建了一些類,通過模塊的聲明相互組成:這在茉莉花測試中意味着什麼:Uncaught TypeError:對象原型可能只是一個Object或null:undefined?
module xxx.DeviceData {
export class ConsoleListener extends DataListener {
constructor() {
super("ConsoleListener");
}
addData(data: string) {
console.log(this.title + ": " + data);
}
clear() {
console.clear();
}
}
}
我撰寫的茉莉花測試一起以同樣的方式:
module xxx.DeviceData {
describe('ConsoleListener test', function() {
var consoleListener,
consoleListenerObj;
beforeEach(() => {
consoleListener = jasmine.createSpy("consoleListener");
consoleListenerObj = jasmine.createSpyObj('consoleListenerObj', ['onSuccess', 'onFailure', 'addData', 'clear']);
consoleListenerObj.onSuccess();
consoleListenerObj.onFailure();
consoleListenerObj.addData();
consoleListenerObj.clear();
});
it('test#1 columnDefinition defined', function() {
let consoleListener = new ConsoleListener();
expect(consoleListener).not.toBeNull();
});
it('test#2 call onSuccess', function() {
expect(consoleListenerObj.onSuccess).toHaveBeenCalled();
});
it('test#3 call onFailure', function() {
expect(consoleListenerObj.onFailure).toHaveBeenCalled();
});
it('test#4 call addData', function() {
expect(consoleListenerObj.addData('123'));
});
it('test#5 call clear', function() {
expect(consoleListenerObj.clear());
});
});
}
這一切都完美transpiles。當我嘗試執行測試,我收到此錯誤
遺漏的類型錯誤:對象的原型可能只是一個對象或null:在腳本/ DeviceData/ConsoleListener.js未定義:5:27
事情錯了在傳送的JS的第5行,對不對?這裏是:
var __extends = (this && this.__extends) || (function() {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var xxx;
(function (xxx) {
var DeviceData;
(function (DeviceData) {
var ConsoleListener = (function (_super) {
__extends(ConsoleListener, _super);
function ConsoleListener() {
return _super.call(this, "ConsoleListener") || this;
}
ConsoleListener.prototype.addData = function (data) {
console.log(this.title + ": " + data);
};
ConsoleListener.prototype.clear = function() {
console.clear();
};
return ConsoleListener;
}(DeviceData.DataListener));
DeviceData.ConsoleListener = ConsoleListener;
})(DeviceData = xxx.DeviceData || (xxx.DeviceData = {}));
})(xxx|| (xxx= {}));
//# sourceMappingURL=ConsoleListener.js.map
當然,第5行似乎是在談論對象和原型。
我試過不同的方式讓模塊彼此交談,但是這個模塊方法是我能夠始終如一地工作的唯一方法。需要在這裏傳遞的業力/茉莉花背景中是否缺少某些東西?
這裏是我的karma.config:
module.exports = function (config) {
config.set({
frameworks: ["jasmine","karma-typescript"],
preprocessors: {
"Scripts/**/*.ts": ["karma-typescript"]
},
files: [
'Scripts/DeviceData/*.ts',
'Scripts/UnitTests/*.spec.ts'
],
exclude: [
'Scripts/**/NodeJSDataSocket.ts'
],
reporters: ["progress", "karma-typescript"],
//reporters: ["dots", "karma-typescript"],
browsers: ["Chrome"],
karmaTypescriptConfig: {
compilerOptions: {
"module": "commonjs",
"sourceMap": true,
"target": "es5"
"moduleResolution": "classic",
"noImplicitAny": false
},
tsconfig: "./tsconfig.json",
},
});
};
優秀 - 這在回顧過程中顯得很明顯。我的第一個想法是,它沒有包含在karma.config中,但它應該是 - 我已經在上面發佈了。任何其他想法爲什麼它不包括在內?與此同時,我有一個獨立的文件可以分離和測試以確認這一點。 –
是的,這工作,所以它絕對是在那裏繼承。 –
哪個文件是'DataListener'中的? – Fenton