我将如何对调用已承诺的导入类的方法的类方法进行单元测试?我有以下结构:
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
中的代码会更好吗?
更新
显然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
放在单独的函数中并进行测试。
答案 0 :(得分:1)
您正在存出somePromiseMethod
的{{1}}上存在错误的方法prototype
,因此您需要存根该方法。 Sinon应该让您做类似的事情:
SomeClass