2014-04-23 91 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(); 
    } 
}); 
相關問題