Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用sinon模拟d3.select.selectall?_Javascript_D3.js_Sinon - Fatal编程技术网

Javascript 如何使用sinon模拟d3.select.selectall?

Javascript 如何使用sinon模拟d3.select.selectall?,javascript,d3.js,sinon,Javascript,D3.js,Sinon,我需要测试以下代码: window.d3.select(id).selectAll("text").attr("font-family", "FontAwesome"); var textsSelected = window.d3.select(id).selectAll('text'); var filtered = textsSelected.filter(function(value, index, arr) { return !((value===undefined)||(

我需要测试以下代码:

window.d3.select(id).selectAll("text").attr("font-family", "FontAwesome"); 

var textsSelected = window.d3.select(id).selectAll('text');

var filtered = textsSelected.filter(function(value, index, arr) {
    return !((value===undefined)||(typeof (value) === "number"));
});
我正在努力模仿它,这样两行都可以运行,而不会因为错误而崩溃

目前我有

var texts = {
    _group:[
        [{id: "textID2#StatusChangeChart",
           textContent: " New", 
           __data__: "hi"
            }]
        ],
    fontFamily: "shouldChange",
    __proto__:{
        attr: function (name, value) {
            if (name === 'font-family') {
                // this works
                this.fontFamily = value;
            }
        }
    }

};


var d3Select = sinon.stub(window.d3,'select');

 d3Select.withArgs("#testUpdateImage").returns({
    selectAll: function (e) {

        var objectToReturn = imageUpdateGroups;

        switch (e) {
           //stuff here
            case "text":
                objectToReturn = texts;

                //TODO
                break;

           //stuff here

        }
        return objectToReturn;
    }
});
作为嘲弄

我得到一个错误
TypeError:array.filter不是一个函数
,我的console.log语句显示attr确实发生了应该发生的变化

选择的文本应该是什么

键入
window.d3.select('PhaseChangeChart')。selectAll('text')进入控制台返回(组已展开以便于查看):


每个
文本都是一个文本元素。

临时答案,直到有人有更好的答案(不涉及模仿
过滤器的答案)

\uuuu proto\uuuu
添加一个过滤函数将停止错误

var toFilter =[
    {
        0: [
            {
                id: "textID2#StatusChangeChart",
                textContent: "New",
                __data__: "hi"
            }
        ]
    }
];

var texts = {
    _group: toFilter,
    fontFamily: "shouldChange",
    __proto__:{
        attr: function (name, value) {
            if (name === 'font-family') {
                this.fontFamily = value;
            }
        },
        filter: function (value, index,arr){
            return {_groups:[undefined]};
        }
    }

};

就我个人而言,我需要更改
undefined
,以实际返回我可以更改的
样式的内容,以便对我正在测试的函数的其余部分进行测试,从而测试该函数的实际功能。但是,如果有人想知道将来如何解决这个问题,只需添加自己的函数,而不是使用预先制作的库函数。您没有测试它们的功能。你在测试你的。让它返回您希望它返回的内容,并查看您的函数是否支持您希望它支持的数据。

临时答案,直到有人有更好的答案(不涉及模拟
过滤器的答案)

\uuuu proto\uuuu
添加一个过滤函数将停止错误

var toFilter =[
    {
        0: [
            {
                id: "textID2#StatusChangeChart",
                textContent: "New",
                __data__: "hi"
            }
        ]
    }
];

var texts = {
    _group: toFilter,
    fontFamily: "shouldChange",
    __proto__:{
        attr: function (name, value) {
            if (name === 'font-family') {
                this.fontFamily = value;
            }
        },
        filter: function (value, index,arr){
            return {_groups:[undefined]};
        }
    }

};

就我个人而言,我需要更改
undefined
,以实际返回我可以更改的
样式的内容,以便对我正在测试的函数的其余部分进行测试,从而测试该函数的实际功能。但是,如果有人想知道将来如何解决这个问题,只需添加自己的函数,而不是使用预先制作的库函数。您没有测试它们的功能。你在测试你的。让它返回您希望它返回的内容,并查看您的函数是否支持您希望它支持的数据。

检查数组是否为jsarray@Rishab结果证明这个名字非常容易让人误解。运行实际代码(不是我的测试):typeof(array)返回对象。isArray(数组)返回false。所以它甚至不应该是我嘲笑的数组。混淆过滤器的工作原理,但在我不进行测试时确实如此。更新:更改变量名称更新:描述了所选文本应该包含的内容添加了临时答案,但如果有更好的答案,请告诉我。我不希望模拟过滤器检查数组是否为jsarray@Rishab结果证明这个名字非常容易让人误解。运行实际代码(不是我的测试):typeof(array)返回对象。isArray(数组)返回false。所以它甚至不应该是我嘲笑的数组。混淆过滤器的工作原理,但在我不进行测试时确实如此。更新:更改变量名称更新:描述了所选文本应该包含的内容添加了临时答案,但如果有更好的答案,请告诉我。我不想模拟过滤器当然,模拟过滤器感觉是我以测试的名义做过的最糟糕的事情之一,因为我确实关心过滤器在我不测试时返回正确的东西,但我只能假设它是正确的,因为在我不测试时函数工作正常。当然,模拟过滤器感觉像是我以测试的名义做过的最糟糕的事情之一,因为我确实关心过滤器在我不测试它时返回正确的东西,但我只能假设它会返回正确的东西,因为在我不测试时函数正常工作。