要在ApolloTestingModule中多次刷新watchQuery,可以使用Angular的TestBed来模拟测试环境。下面是一个代码示例:
import { ApolloTestingModule, ApolloTestingController } from 'apollo-angular/testing';
describe('MyComponent', () => {
let controller: ApolloTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ApolloTestingModule],
providers: [MyComponent],
});
controller = TestBed.inject(ApolloTestingController);
});
it('should refresh watchQuery multiple times', () => {
const fixture = TestBed.createComponent(MyComponent);
const component = fixture.componentInstance;
// 发起第一次查询
component.query();
// 模拟服务器返回查询结果
const op = controller.expectOne(/*graphql查询*/);
op.flush({
data: {
// 查询结果
},
});
// 发起第二次查询
component.query();
// 模拟服务器返回第二个查询结果
const op2 = controller.expectOne(/*graphql查询*/);
op2.flush({
data: {
// 第二个查询结果
},
});
// 可以继续发起更多查询,并模拟服务器返回结果
// 断言预期的查询次数
controller.verify();
});
});
在此示例中,我们首先导入ApolloTestingModule和ApolloTestingController。然后,在beforeEach块中,我们使用TestBed创建了一个ApolloTestingModule实例,并使用TestBed.inject获取ApolloTestingController的实例。
在测试用例中,我们创建了一个MyComponent的实例,并调用了它的query方法来发起查询。我们使用controller.expectOne方法模拟了服务器返回的查询结果,并使用op.flush方法来模拟服务器返回的数据。
我们可以多次调用组件的query方法,并模拟服务器返回不同的结果。最后,我们使用controller.verify方法来断言预期的查询次数。
请根据你的具体需求和代码进行相应的修改和适配。