Как мне провести модульное тестирование метода класса, который вызывает метод импортированного класса, который является обещанием?У меня есть следующая структура:
import { SomeClass } from 'some-library';
class MyClass extends AnotherClass {
myMethod() {
const someClass = new SomeClass();
return someClass.somePromiseMethod('someParam')
.then(response => response.data)
.then(response => {
// Do stuff
});
}
}
У меня есть следующий тест
describe('myMethod', () => {
it('does something', async () => {
const inst = new MyClass();
const stub = sinon.stub(SomeClass, 'somePromiseMethod')
.resolves(Promise.resolve({
data: [],
}));
await inst.myMethod();
expect(stub.callCount).to.equal(1);
});
});
Который все еще довольно прост, так как я не уверен, как подойти к этому.Было бы лучше разбить код на then
s?
UPDATE
Видимо SomeClass
- это одиночный код, а sinon выдает ошибку, говоря somePromiseMethod
это non-existent own property
.Я изменил заглушку так, чтобы она вызывала prototype
, и теперь вызывается заглушка.
class MyClass extends AnotherClass {
myMethod() {
const someClassInstance = SomeClass.getInstance();
return someClassInstance.somePromiseMethod('someParam')
.then(response => response.data)
.then(response => {
// Do stuff
});
}
}
describe('myMethod', () => {
it('does something', async () => {
const inst = new MyClass();
const stub = sinon.stub(SomeClass.prototype, 'somePromiseMethod')
.resolves(Promise.resolve({
data: [],
}));
await inst.myMethod();
expect(stub.callCount).to.equal(1);
});
});
Теперь, с тех пор, как второй then
просто вернет data
, я мог бы просто поставить //Do stuff
в отдельной функции и проверьте это.