【发布时间】:2020-04-08 15:19:19
【问题描述】:
我正在使用ag-grid,我需要在一段代码上编写 Jasmine 单元测试。此代码使用我们称为RestService 的类调用我们的休息服务器,我想使用spyOn 来模拟这些调用和响应。在代码的其他地方,我使用spyOn(RestService, 'function').and.returnValue(),它完全没有问题。此代码由ag-grid 自动调用,并且它位于具有getRows 函数的数据源对象中。在这里它调用api返回下一页数据。该信息可以在https://www.ag-grid.com/javascript-grid-infinite-scrolling/上找到
var dataSource = {
rowCount: null,
getRows: function(params) {
console.log("asking for " + params.startRow + " to " + params.endRow);
// rest service call happens in here
// something like params.context.mycontext.restService.fetchNextRows(data);
}
}
我有一个spyOn 和spyOn(restService, 'fetchNextRows').and.returnValue(Observable.of(something)),但它不适用于这个。它尝试实际调用其余服务并失败,因为它在单元测试期间没有运行。有人知道解决方法吗?
我的 spec.ts 用途:
TestBed.configureTestingModule(
imports everything i use + has
providers: [RestService]
).compileComponents();
let restService = TestBed.get("RestService");
spyOn(restService, 'fetchNextRows').and.returnValue(Observable.of("mocked json"));
fixture = TestBed.createComponent(ActionComponent);
component = fixture.componentInstance;
【问题讨论】:
-
你如何设置你的测试?通过测试床?如果是这样,这可能是因为没有正确提供服务
-
是的,我使用 TestBed。我配置这个组件的方式与在 app.module.ts 中配置的方式相同。我将 RestService 作为提供者导入。 spyOn 像 ngOnInit() 一样工作,但是一旦 ag-grid 触发 getRows() 函数被调用,它就不会监听。
-
@Justin Cross:您能否从您的
.spec.ts文件中发布更多代码? -
我从我的规范中添加了一些。这里的一切都在我的 beforeEach() => {} 中。
-
能否在创建数据源的地方粘贴一段代码?它是 ActionComponent onInit() 的内部吗?
标签: angular unit-testing jasmine ag-grid spyon