【问题标题】:Jasmine unit test spyOn not working in callback functionJasmine 单元测试 spyOn 在回调函数中不起作用
【发布时间】: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);
    }
}

我有一个spyOnspyOn(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


【解决方案1】:

在您的spec.ts 中,从TestBed 请求RestService 时不得使用双引号。

let restService = TestBed.get(RestService); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2015-02-28
    • 2016-05-14
    • 2018-02-26
    • 1970-01-01
    相关资源
    最近更新 更多