使用Jasmine 2.0和PhantomJS对ext js进行单元测试

时间:2014-04-23 15:46:14

标签: javascript unit-testing extjs jasmine phantomjs

我正在尝试为我的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);
    }    
});

1 个答案:

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