如何正确指定使用 ts-sinon 的模拟的两种类型?

Posted

技术标签:

【中文标题】如何正确指定使用 ts-sinon 的模拟的两种类型?【英文标题】:How can I correctly specify both types for a mock with ts-sinon? 【发布时间】:2022-01-05 21:10:10 【问题描述】:

有没有办法在 ts-sinon 存根构造函数上声明类型,以便打字稿理解来自 ts-sinon 和模拟类的属性和方法都可用?

下面的代码有效,但我希望foo 上的类型比any 更具体:

import  expect  from 'chai';
import * as sinon from 'ts-sinon'

class Foo 
  public getFoo(): string 
    return 'foo';
  


describe('Foo', () => 
  it('can mock methods on Foo', () => 
    // How can I specify a specific type that will allow properties
    // and methods from both Foo and the stubConstructor return? 
    let foo: any = sinon.stubConstructor(Foo);
    foo.getFoo.returns('bar');
    expect(foo.getFoo()).to.equal('bar');
  );
);

我尝试了诸如 Foo | sinon.StubbedInstance<Foo> 之类的类型,但找不到合适的类型。

【问题讨论】:

【参考方案1】:

显然只有sinon.StubbedInstance<Foo> 包括这两个集合。在发布问题后,我终于让它工作了。

import  expect  from 'chai';
import * as sinon from 'ts-sinon'

class Foo 
  public getFoo(): string 
    return 'foo';
  


describe('Foo', () => 
  it('can mock methods on Foo', () => 
    let foo: sinon.StubbedInstance<Foo> = sinon.stubConstructor(Foo);
    foo.getFoo.returns('bar');
    expect(foo.getFoo()).to.equal('bar');
  );
);

【讨论】:

以上是关于如何正确指定使用 ts-sinon 的模拟的两种类型?的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )(代码

CSS:如何选择一个元素下的两种同级子元素?

关于Java单例模式中懒汉式和饿汉式的两种类创建方法

如何正确模拟使用本机代码的 React Native 模块?

如何正确使用 SendInput() 在 C# 中模拟鼠标输入

如何设置DateTime值的时区(或种类)?