Заглушка объекта, который находится внутри другого конструктора объекта - PullRequest
0 голосов
/ 28 сентября 2018

Как заглушки this.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)

1 Ответ

0 голосов
/ 28 сентября 2018

Из документов это выглядит следующим образом:

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

Например, поскольку метод включен на twinky.desires, передайте его вместо twinky, а затем просто передайте eat в качестве имени метода.Очевидно, что sinon не разбирает точечные записи и не погружается в объект (что совершенно разумно, если он этого не делает).

...