gpt4 book ai didi

typescript - 这在 Jasmine 测试 : Uncaught TypeError: Object prototype may only be an Object or null: undefined? 中意味着什么

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:32 25 4
gpt4 key购买 nike

我正在努力使用 Jasmine 测试一些 Typescript 类。我创建了一些通过模块声明相互组合的类:

module xxx.DeviceData {
export class ConsoleListener extends DataListener {
constructor() {
super("ConsoleListener");
}

addData(data: string) {
console.log(this.title + ": " + data);
}

clear() {
console.clear();
}
}
}

我以相同的方式将 Jasmine 测试组合在一起:

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());
});
});
}

这一切都可以完美转换。当我尝试执行测试时,我收到此错误

Uncaught TypeError: Object prototype may only be an Object or null: undefined at Scripts/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 行似乎在谈论对象和原型(prototype)。

我尝试了不同的方法让模块相互通信,但这种模块方法是我唯一可以持续工作的方法。 karma/jasmine 上下文中是否缺少需要传递到此处的内容?

这是我的 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",
},
});
};

最佳答案

错误看起来像是来自 extends 函数,当您从父类(super class)继承时,TypeScript 会注入(inject)该函数。

查看代码,我会说您的 DataListener 在您使用时不可用:

extends DataListener 

它可能不会完全丢失,否则编译器会警告您 - 因此当 Jasmine 运行时它没有被包含(即加载),或者您的加载顺序不正确。

让它们井井有条,希望……快乐!

        files: [
'Scripts/DeviceData/DataListener.ts',
'Scripts/DeviceData/ConsoleListener.ts',
'Scripts/UnitTests/*.spec.ts'
],

关于typescript - 这在 Jasmine 测试 : Uncaught TypeError: Object prototype may only be an Object or null: undefined? 中意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com