Как мне смоделировать зависимости, чтобы вернуть конкретные данные? - PullRequest
0 голосов
/ 12 декабря 2018

Исходя из Moq в C #, где вы можете сделать следующее:

someMock
    .Setup(toBeMocked => toBeMocked.MockedMethod(It.IsAny<Something>()))
    .Returns(something);

Затем в модульном тесте, когда я звоню

toBeMocked.MockedMethod()

Возвращает something.Как мне сделать это с sinonjs?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Sinon работает немного по-другому, чем Moq, в основном потому, что C # - это совсем другой язык, чем JS.Moq создает подклассы для внедрения поддельных методов, в то время как sinon может внедрять их, назначая их непосредственно объектам.

Большинство базовых шаблонов будут такими, если toBeMocked - это объект с методом экземпляра MockedMethod:

sinon.stub(toBeMocked, 'MockedMethod').returns(something);

Присваивает метод-заглушку свойству MockedMethod объекта toBeMocked.Таким образом, он влияет только на этот объект, даже если MockedMethod является методом-прототипом.

Если вы хотите заменить метод для всех экземпляров конструктора, вы можете сделать это вместо этого.Предполагая, что MockedClass является конструктором, который вы использовали для создания объекта toBeMocked, он будет выглядеть следующим образом:

sinon.stub(MockedClass.prototype, 'MockedMethod').returns(something);

Затем в вашем коде разрыва:

MockedClass.prototype.MockedMethod.restore();

Вынеобходимо восстановить его следующим образом, поскольку этот прототип не создается заново между тестами, поэтому ваша заглушка будет загрязнять ваш другой тестовый код, если вы этого не сделаете.

0 голосов
/ 12 декабря 2018

Из документации https://sinonjs.org/releases/v7.2.2/stubs/:

const fakeMethod = () => something;
const stub = sinon.stub(toBeMocked , 'MockedMethod');
stub.callsFake(fakeMethod);

ОБНОВЛЕНИЕ: пример jsfiddle

...