2014-04-23 66 views
1

我正在尝试为我的ext js应用程序设置单元测试。
我使用Jasmine 2.0和PhantomJS从控制台运行测试。
我可以在控制器的init方法中成功初始化存储。
但是,如果我尝试声明它在商店Config中,我发现了以下错误:
类型错误:“空”是不是(评估“新C()”)构造函数(1号线)(1) ,
错误的原因是什么,如何解决?
用Jasmine 2.0和PhantomJS进行单元测试ext js

预先感谢您。

我的代码如下:

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

我不知道,如果'Stores.myStore'会妥善解决,在指定商店初始化的时间,你可以通过在'stores' config中硬编码来指定'Stores.myStore'的值来尝试一下吗? – Cyclone

+0

@Cyclone 你的意思是明确指定完整的命名空间吗? 我试过了。同样的结果 – DanielS

+0

嗯: -/ 我不知道还有什么是怎么了...... – Cyclone

回答

4

的问题是使用茉莉花2.0,当所有的教程使用茉莉花1.3
在茉莉2.0 boot.js导入的文件。
它在window.onload上呼叫jasmine.getEnv().execute()
因此,在调用Ext.launch之前,规范正在执行。 一旦我从boot.js中删除对​​的呼叫,它就开始工作。 下面是我TestApplication.js代码

附注:最终版本 需要注意的是,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(); 
    } 
}); 
相关问题