Rally - 数组不包含所有推送元素

时间:2014-03-01 04:42:43

标签: rally

我有一个我正在尝试使用的应用程序,但似乎在迭代数组并推入另一个数组时。将数组合并为一个对我来说不起作用。示例 - 我看到所有213个推送到这个数组但是当我检查它的内容时它们更少。

以下代码显示了不完整的数组推送列表。

对于213个测试用例,测试集只有67个被推送并存在于数组中

that = this;
                that._testSetTestList = [];
                console.log('testsetdata',testsetdata);

                Ext.Array.each(testsetdata, function(record) {
                console.log('record.get(TestCases)',record.get('TestCases'));
                    Ext.Array.each(record.get('TestCases'), function(name, index) {
                        that._testSetTestList.push({
                            resID: name.FormattedID,
                            resName: name.Name,
                            resObject: name.ObjectID,
                            resSetID: record.get('FormattedID'),
                            resSet: record.get('Name'),
                            resSetObject: record.get('ObjectID'),
                            resSetProject: name.Project.ObjectID                        
                        });
                        console.log('_testSetTestList.push',{
                            resID: name.FormattedID

                        });
                    });
                });

任何人都可以指导我做错的事情。

3 个答案:

答案 0 :(得分:1)

请尝试使用此代码:

this._testSetTestList = Ext.Array.flatten(Ext.Array.map(testsetdata, function(record) {
    return Ext.Array.map(record.get('TestCases'), function(name, index) {
        return {
            resID: name.FormattedID,
            resName: name.Name,
            resObject: name.ObjectID,
            resSetID: record.get('FormattedID'),
            resSet: record.get('Name'),
            resSetObject: record.get('ObjectID'),
            resSetProject: name.Project.ObjectID 
        };
    });
}))

答案 1 :(得分:1)

我的案例中的问题不是代码而是范围。我试图获得在项目树中无法直接访问的测试用例的测试用例结果。我们将测试用例存放在多个项目中,然后我们在不同项目下的测试集中使用它们。如果作为查询测试集的一部分的测试用例可以直接访问我们查看此页面的项目,那么如果测试用例位于与查看应用程序的兄弟节点相同的项目中,则会计算测试用例结果从那时起,查询无法找到它们并获取它们的测试用例结果。解决方案是在正确的项目下整合所有测试用例,以便应用程序可以从任何所需项目访问它们。

答案 2 :(得分:0)

基于使用来自this github repo的promises的示例,这里是一个代码,用于构建测试集网格及其测试用例集合,其中推送测试集setsWithCases数组的元素到另一个数组testsets,第二个数组用于填充网格。第二个数组包含第一个数组的所有元素。我正在使用LowDash _.each,包含在AppSDK2中。

Ext.define('CustomApp', {
    extend: 'Rally.app.App',
    componentsCls: 'app',

    launch: function(){

        var aStore = Ext.create('Rally.data.wsapi.Store', {
            model: 'TestSet',
            fetch: ['ObjectID', 'FormattedID', 'Name', 'TestCases'],
            autoLoad: true,
            context:{
                projectScopeUp: false,
                projectScopeDown: false
            },
            listeners:{
                scope: this,
                load: this._onStoreLoaded
            }
        });
    },
    _onStoreLoaded: function(store, records){
        var setsWithCases = [];
        var testsets = [];
        var that = this;
        var promises = [];

        _.each(records, function(testset){
            promises.push(that._getTestCases(testset, that));
        });
        Deft.Promise.all(promises).then({
            success: function(results) {
                _.each(results, function(result) {
                    if (result.TestCases.length > 0) {
                        setsWithCases.push(result);
                    }
                });

                _.each(setsWithCases, function(testset){
                    testsets.push(testset);
                });
                that._makeGrid(testsets);
            }
        });

    },

    _getTestCases:function(testset, scope){
        var deferred = Ext.create('Deft.Deferred');
        var that = scope;

        var testcases = [];
        var result = {};

        var testsetRef = testset.get('_ref');
        var testsetObjectID = testset.get('ObjectID');
        var testsetFormattedID = testset.get('FormattedID');
        var testsetName = testset.get('Name');
        var testcaseCollection = testset.getCollection("TestCases", {fetch: ['Name', 'FormattedID']});
        var testcaseCount = testcaseCollection.getCount();

        testcaseCollection.load({
            callback: function(records, operation, success){
                _.each(records, function(testcase){
                    testcases.push(testcase);
                });
                result = {
                    "_ref": testsetRef,
                    "ObjectID": testsetObjectID,
                    "FormattedID": testsetFormattedID,
                    "Name": testsetName,
                    "TestCases": testcases 
                };
                deferred.resolve(result);
            }
        });

        return deferred;
    },

    _makeGrid:function(testsets){
        var that = this;

        var gridStore = Ext.create('Rally.data.custom.Store', {
            data: testsets,
            pageSize: 1000,
            remoteSort: false
        });

        var aGrid = Ext.create('Rally.ui.grid.Grid', {
            itemId: 'testsetGrid',
            store: gridStore,
            columnCfgs:[
                {
                   text: 'Formatted ID', dataIndex: 'FormattedID', xtype: 'templatecolumn',
                    tpl: Ext.create('Rally.ui.renderer.template.FormattedIDTemplate') 
                },
                {
                    text: 'Name', dataIndex: 'Name', flex: 1
                },
                {
                    text: 'TestCases', dataIndex: 'TestCases', flex:1,
                    renderer: function(value) {
                        var html = [];
                        _.each(value, function(testcase){
                            html.push('<a href="' + Rally.nav.Manager.getDetailUrl(testcase) + '">' + testcase.get('FormattedID') + '</a>' + ' ' + testcase.get('Name'));
                        });
                        return html.join(', ');
                    }
                }

            ]
        });
        that.add(aGrid);
    }

});