我正在使用Typescript编写应用程序,并希望使用 ts-sinon创建单元测试。
在他们的自述文件中,他们指出您可以对这样的方法进行存根:
import * as sinon from 'ts-sinon'
class Test {
method() { return 'original' }
}
const test = new Test();
const testStub = sinon.stubObject<Test>(test);
testStub.method.returns('stubbed');
expect(testStub.method()).to.equal('stubbed');
但是这段代码给了我这个错误:
类型'()=>字符串'不存在属性'returns'。
我在做什么错了?
答案 0 :(得分:0)
您可能必须将stubObject定义为:
thenReturn
答案 1 :(得分:0)
我遇到了类似的问题,这篇帖子对我来说是一个错误的肯定。我认为值得指出的是,当我将代码放入以下测试中时,它可以按预期工作。
/* eslint-disable @typescript-eslint/explicit-function-return-type */
import * as chai from 'chai'
import * as sinon from 'ts-sinon'
const expect = chai.expect
class Test {
public method() : string {return `original`}
}
const test = new Test()
describe.only(`ts-sinon stubObject()<Test> should`, () => {
it(`return the expected value`, () => {
const testStub = sinon.stubObject<Test>(test)
testStub.method.returns(`stubbed`)
expect(testStub.method()).to.equal(`stubbed`)
})
})
我遇到的问题是没有为存根设置正确的类型。下面的示例添加一个beforeEach
并在更高级别上限制存根。设置了错误的存根类型,导致我的“属性返回不存在”错误。
/* eslint-disable @typescript-eslint/explicit-function-return-type */
import * as chai from 'chai'
import * as sinon from 'ts-sinon'
const expect = chai.expect
class Test {
public method() : string {return `original`}
}
describe.only(`ts-sinon stubObject()<Test> should`, () => {
let testStub: sinon.StubbedInstance<Test> // <- Type the stub correctly
beforeEach(() => {
const test = new Test()
testStub = sinon.stubObject<Test>(test)
testStub.method.returns(`stubbed`)
})
it(`return the expected value`, () => {
expect(testStub.method()).to.equal(`stubbed`)
})
})