Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 存根位于另一个对象构造函数中的对象_Javascript_Sinon - Fatal编程技术网

Javascript 存根位于另一个对象构造函数中的对象

Javascript 存根位于另一个对象构造函数中的对象,javascript,sinon,Javascript,Sinon,如何存根这个.desires.eat const sinon = require('sinon'); const expect = require('expect.js'); class Cat { constructor() { this.desires = { eat: () => 'for a mouse' } } breakfast() { return 'go ' + this.desires.eat(); } } con

如何存根
这个.desires.eat

const sinon = require('sinon');
const expect = require('expect.js');

class Cat {
  constructor() {
    this.desires = {
      eat: () => 'for a mouse'
    }
  }

  breakfast() {
    return 'go ' + this.desires.eat();
  }
}

const twinky = new Cat();

sinon.stub(twinky, 'desires.eat', () => {
  return 'fishing';
});

describe('test cat', () => {
  it('cat is going to have breakfast', (done) => {
    const solution = twinky.breakfast();
    expect(solution.includes('fishing')).to.be(true);
    done();
  });
});
现在我有以下错误:

/media/trex/safe1/Development/app/node_modules/sinon/lib/sinon/util/core.js:115
                    throw error;
                    ^

TypeError: Attempted to wrap undefined property desires.eat as function
    at Object.wrapMethod (/media/trex/safe1/Development/app/node_modules/sinon/lib/sinon/util/core.js:106:29)
    at Object.stub (/media/trex/safe1/Development/app/node_modules/sinon/lib/sinon/stub.js:67:26)
    at Object.<anonymous> (/media/trex/safe1/Development/app/server/lib/test.js:19:7)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
/media/trex/safe1/Development/app/node\u modules/sinon/lib/sinon/util/core.js:115
投掷误差;
^
TypeError:试图将未定义的属性desires.eat包装为函数
在Object.wrapMethod(/media/trex/safe1/Development/app/node_modules/sinon/lib/sinon/util/core.js:106:29)
在Object.stub(/media/trex/safe1/Development/app/node_modules/sinon/lib/sinon/stub.js:67:26)
反对。(/media/trex/safe1/Development/app/server/lib/test.js:19:7)
编译(Module.js:652:30)
在Object.Module.\u extensions..js(Module.js:663:10)
在Module.load(Module.js:565:32)
在tryModuleLoad时(module.js:505:12)
在Function.Module.\u加载(Module.js:497:3)
位于Function.Module.runMain(Module.js:693:10)
启动时(bootstrap_node.js:191:16)
从中可以看出:

sinon.stub(twinky.desires, 'eat', () => {
    return 'fishing';
});

例如,由于该方法启用了
twinky.desires
,因此将其传入而不是
twinky
,然后将
eat
作为方法名称传递。显然,sinon不会解析虚线符号字符串并深入到对象中(这是完全合理的,因为它不这样做)。

@t.J.Crowder correct!非常感谢。