我的问题是创建存根实例时如何包括受保护的属性。
在笑话中,我有:
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)
反正有什么要告诉诗乃将这些物业包括在内吗? 任何帮助将不胜感激。
答案 0 :(得分:0)
我不知道在您的情况下 Repo 对 EntityManager 做了什么,对我来说,要在这里测试什么也不是很清楚。基于此,我的回答有点笼统,但也许可以为您指明正确的方向。
我的想法:也许您应该将它们分离。我将通过以下方式进行处理:
用您的存根实例模拟EntityManager的吸气剂返回模拟数据:
manager.getRepos.returns(mockedRepos);
这样,您在测试中就不需要受保护的存储库var。
答案 1 :(得分:0)
我用
解决了这个问题repo = new Repo(manager as any);