我在一个单独的.ts文件中定义服务的存根,该文件在多个组件中使用(这就避免了我在每个组件中定义相同的存根)。问题是,这会导致随机的单元测试,因为当组件修改存根的属性时,下一个将使用此存根的组件将受到影响。
我使用扩展操作符来定义我的serviceStub,每次都使用一个新的引用,但似乎还不够。
export const myserviceStub = {
...{
function1() {},
propertyA: new BehaviorSubject(false),
}
};并在带有测试床的beforeEach中使用此存根:
providers: [
{ provide: myService, useValue: myserviceStub },我期望myServiceStub按照我的文件中的定义,而不是依赖于单元测试的顺序。
发布于 2019-11-05 01:53:21
您应该将您的对象视为不可变的,在单独文件中的常量的定义中使用扩展运算符不会阻止您更改对象的内部引用。每次导入此const时,它将始终使用相同的引用。
要获得不同的引用,您可以在提供程序上使用useFactory,并在共享存根文件中声明存根工厂:
export const myserviceStub = {
function1() {},
propertyA: new BehaviorSubject(false)
};
export function myServiceStubFactory() {
return { ...myserviceStub };
}然后您可以像这样提供它:
providers: [
{ provide: myService, useFactory: myserviceStub }
]但是,这仍将共享propertyA上定义的BehaviorSubject,要更改此设置,您必须更新您的工厂:
export function myServiceStubFactory() {
return {
...myserviceStub,
propertyA: new BehaviorSubject(false)
};
}所以,总而言之,最好只使用一个工厂,而不是固定的对象,并在工厂返回方法中定义整个对象
发布于 2019-11-05 18:17:34
谢谢你的回答。我最终找到了一种方法,使用Object.create()来获得一个新的引用。
https://stackoverflow.com/questions/58697354
复制相似问题