Javascript Sinon存根函数中的函数

Javascript Sinon存根函数中的函数,javascript,unit-testing,sinon,Javascript,Unit Testing,Sinon,我将在我的工作地点对我们的javascript文件进行测试。我决定使用Mocha、Chai和Sinon库来帮助测试。我从为不需要太多重构的函数编写单元测试开始,遇到了一个我不太理解的有趣案例 function getQueries() { code that returns queries in an array -> ['one', 'two', 'three'] } function sort(col, type) { var queries = getQueries

我将在我的工作地点对我们的javascript文件进行测试。我决定使用Mocha、Chai和Sinon库来帮助测试。我从为不需要太多重构的函数编写单元测试开始,遇到了一个我不太理解的有趣案例

function getQueries() {
  code that returns queries in an array -> ['one', 'two', 'three']    
}

function sort(col, type) {
  var queries = getQueries();
  some code that sorts these queries
  return sorted array
}
因为我正在对排序函数进行单元测试,所以我希望stub getquerys()返回一个伪列表

var queries = ['one', 'two', 'three'];
sinon.stub(getQueries).returns(queries);
上述代码不起作用错误消息:

TypeError: Attempted to wrap undefined property undefined as function
at Object.wrapMethod (file://node_modules/sinon/pkg/sinon-1.17.7.js:1359:29)
at Object.stub (file://node_modules/sinon/pkg/sinon-1.17.7.js:3459:26)
at F.stub (file://node_modules/sinon/pkg/sinon-1.17.7.js:4200:44)
at Context.obj.stub (file://node_modules/sinon/pkg/sinon-1.17.7.js:4215:37)
at Context.<anonymous> (unit_tests/unit_test.js:154:10)
at Context.sinonSandboxedTest (file:/node_modules/sinon/pkg/sinon-1.17.7.js:6069:39)

我不完全理解为什么这段代码可以工作,而上面的代码却不能。我知道sinon.stub(obj、方法、函数)的语法,但getquerys是一个没有对象的函数。非常感谢您的任何见解

如果
getquerys
似乎不是对象的一部分,那么它是全局对象
窗口的一部分,因此
sinon.stub(窗口,'getquerys',…)
应该起作用


在这种情况下,可以说更好的方法是将getquerys的结果传递给sort函数。在当前结构中,
sort
函数有两个任务:获取列表和对其排序。您可能不需要命名函数
getSortedQueries
,但actual更好,您甚至不需要模拟或存根函数,因为您只需将固定列表传递给排序函数即可。

太棒了!我曾尝试使用文档作为全局对象,但我猜是它的窗口。谢谢你的回答。
var queries = ['one', 'two', 'three'];
getQueries = sinon.stub();
getQueries.returns(queries);