Sinon创建存根实例-包含受保护的属性

时间:2019-02-20 10:00:55

标签: sinon

我的问题是创建存根实例时如何包括受保护的属性。

在笑话中,我有:

const sandbox = createSandbox();
let manager: SinonStubbedInstance<EntityManager>;
let repo: Repo;

beforeEach(() => {
    manager = sandbox.createStubInstance(EntityManager);
    repo = new Repo(manager);
});

afterEach(() => sandbox.restore());

正在尝试建立以下项目的存根:

export declare class EntityManager {

/**
 * Connection used by this entity manager.
 */
readonly connection: Connection;

/**
 * Custom query runner to be used for operations in this entity manager.
 * Used only in non-global entity manager.
 */
readonly queryRunner?: QueryRunner;

/**
 * Once created and then reused by en repositories.
 */
protected repositories: Repository<any>[];

/**
 * Plain to object transformer used in create and merge operations.
 */
.......
}

因此,我似乎无法在存根中包含只读属性和受保护的属性。

在“ repo = new Repo(manager);”处线。 上面的代码产生以下异常:

Argument of type 'SinonStubbedInstance<EntityManager>' is not assignable to parameter of type 'EntityManager'.
Property 'repositories' is missing in type 'SinonStubbedInstance<EntityManager>'.ts(2345)

反正有什么要告诉诗乃将这些物业包括在内吗? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我不知道在您的情况下 Repo EntityManager 做了什么,对我来说,要在这里测试什么也不是很清楚。基于此,我的回答有点笼统,但也许可以为您指明正确的方向。

我的想法:也许您应该将它们分离。我将通过以下方式进行处理:

  1. 在EntityManager中创建一个获取所有存储库的吸气剂,例如将其命名为 getRepos()
  2. 创建一个包含一些Repos的模拟数组... const mockedRepos;
  3. 用您的存根实例模拟EntityManager的吸气剂返回模拟数据:

    manager.getRepos.returns(mockedRepos);

这样,您在测试中就不需要受保护的存储库var。

答案 1 :(得分:0)

我用

解决了这个问题
repo = new Repo(manager as any);