Javascript 使用Systemjs加载的类时出现TypeError
我再一次被Javascript弄糊涂了。我使用Systemjs作为模块加载器,并有一个类,如下所示:Javascript 使用Systemjs加载的类时出现TypeError,javascript,systemjs,karma-mocha,Javascript,Systemjs,Karma Mocha,我再一次被Javascript弄糊涂了。我使用Systemjs作为模块加载器,并有一个类,如下所示: export default class Tool{ constructor(state, displayText) { this._state = state; this._displayText = displayText; } get displayText() { return this._displayText; } get sta
export default class Tool{
constructor(state, displayText) {
this._state = state;
this._displayText = displayText;
}
get displayText() {
return this._displayText;
}
get state() {
return this._state;
}
}
'use strict';
import Tool from '../core/model/framework/Tool';
import chai from '../../../jspm_packages/npm/chai@3.5.0';
chai.should();
describe('MenuProvider', () => {
describe('registration', () => {
it('should register a new Workbench Module', ()=> {
let tools = [];
debugger;
tools.push(new Tool('Pink Fuzzy Bunnies', 'bunnyState'));
tools.push(new Tool('Look no hands', 'nohandsstate'));
let toolboxes = [];
toolboxes.push(new Toolbox('My Shiny New Toolbox', tools));
let newModule = new WorkbenchModule('My Module', toolboxes);
let providerUnderTest = new MenuProvider();
providerUnderTest.loadModule(newModule);
provider.modules.count.should.equal(1);
provider.getModule('My Module').should.not.be.null;
});
});
});
我在单元测试(Karma/Mocha/Chai)中使用这个类,如下所示:
export default class Tool{
constructor(state, displayText) {
this._state = state;
this._displayText = displayText;
}
get displayText() {
return this._displayText;
}
get state() {
return this._state;
}
}
'use strict';
import Tool from '../core/model/framework/Tool';
import chai from '../../../jspm_packages/npm/chai@3.5.0';
chai.should();
describe('MenuProvider', () => {
describe('registration', () => {
it('should register a new Workbench Module', ()=> {
let tools = [];
debugger;
tools.push(new Tool('Pink Fuzzy Bunnies', 'bunnyState'));
tools.push(new Tool('Look no hands', 'nohandsstate'));
let toolboxes = [];
toolboxes.push(new Toolbox('My Shiny New Toolbox', tools));
let newModule = new WorkbenchModule('My Module', toolboxes);
let providerUnderTest = new MenuProvider();
providerUnderTest.loadModule(newModule);
provider.modules.count.should.equal(1);
provider.getModule('My Module').should.not.be.null;
});
});
});
当我点击调试器时,语句工具是未定义的。我非常确定我已经为我的Karma测试正确配置了jspm。在调试Karma测试时,我可以看到每个文件都正确加载
我有什么遗漏吗?我只想指出正确的方向。如果需要添加更多代码或配置,请告诉我。您没有导出类。将其添加到
工具的底部
文件:
export default Tool;
事实上,我是在第一行导出我的类。这个问题原来与Javascript不提升类这一事实有关。基本上,测试是在类被Karma和JSPM加载之前尝试使用它们。通过将以下内容添加到我的配置文件中,我可以通过显式加载文件来解决此问题:
jspm: {
config: 'jspm.conf.js',
loadFiles: ['src/app/angular-bootstrap.js', 'src/app/core/model/**/*.js', 'src/app/**/*.spec.js'], //'src/app/**/!(*.e2e|*.po).js'
serveFiles: ['src/app/**/*.+(js|html|css|json|*jade*)'] // *.{a,b,c} to *.+(a|b|c) https://github.com/karma-runner/karma/issues/1532
}
这就是诀窍:'src/app/core/model//*.js'
就像一个切向的音符。我还对Karam为什么不加载我的Jade文件,这样我就可以使用JSPM导入它们感到不安。我所要做的就是将.jade扩展名添加到Karma提供的文件类型列表中
这是一个奇妙的Javascript世界