我正在尝试为我的ext js应用程序设置单元测试。
我正在使用Jasmine 2.0和PhantomJS从控制台运行测试。
我可以在控制器的init方法中成功初始化存储
但是,如果我尝试在商店配置中声明它,我会收到以下错误:
TypeError:'null'不是构造函数(评估'new c()')(第1行)(1),
错误的原因是什么,如何解决?
提前谢谢。
我的代码如下:
TestApplication.js
Ext.Loader.setConfig({ enabled: true });
Ext.ns('myApp');
// Loading different components like controller, model, view..
Ext.application({
name: 'myApp',
appFolder: '../App',
controllers: [],
autoCreateViewport: false,
init : function() {
myApp.app = this;
},
// Launch Jasmine test environment
launch: function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.execute();
}
});
spec.js
describe("myController", function () {
var ctrl= null,
store = null;
beforeEach(function () {
bmTab = Ext.create("myApp.controller.myController");
bmTab.init();
});
});
myController.js
Ext.define('myApp.controller.myController', {
extend: 'Ext.app.Controller',
//stores: [Stores.myStore];
init:function() {
console.log('**** init');
var store = Ext.create(Stores.myStore);
console.log('**** store created' + store);
}
});
答案 0 :(得分:4)
当所有教程都使用 Jasmine 1.3 时,问题是使用 Jasmine 2.0 。
在Jasmine 2.0中引入了一个文件 boot.js 。
它正在jasmine.getEnv().execute()
上调用window.onload
。
因此,在调用Ext.launch之前,规范正在执行。
一旦我从boot.js中删除了对execute()
的调用,它就开始工作了。
下面是我的TestApplication.js代码的最终版本
P.S。 注意,HtmlReporter也在boot.js中初始化,因此不需要在Ext.launch函数上初始化它
Ext.Loader.setConfig({ enabled: true });
Ext.application({
name: 'myApp',
appFolder: '../App',
controllers: [],
autoCreateViewport: false,
// Launch Jasmine test environment
launch: function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
jasmineEnv.execute();
}
});