ts-sinon:类型上不存在属性“ returns”

时间:2019-06-20 20:21:48

标签: javascript typescript mocha sinon

我正在使用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'。

我在做什么错了?

2 个答案:

答案 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`)
  })
})