首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用jasmine的服务测试中,Spy返回值无法正常工作

在使用jasmine的服务测试中,Spy返回值无法正常工作
EN

Stack Overflow用户
提问于 2019-10-10 04:40:18
回答 1查看 1.3K关注 0票数 0

在我的角度测试中,我不能正确地模拟我注入的服务中函数的返回值。

我使用的是:

jasmine v2.8.0和jasmine-core v2.8.0

我简化了代码,使其更容易理解。这就是..。

这是我想要测试的服务:

代码语言:javascript
复制
export class NetworkService {

  testNumber = 0;

  constructor(private networkReducerService: NetworkReducerService) {
    this.testNumber = networkReducerService.getNumber();
  }
}

这是我的spec.ts

代码语言:javascript
复制
describe('NetworkService', () => {

  let service: NetworkService;
  let networkReducerServiceSpy: jasmine.SpyObj<NetworkReducerService>;

  beforeEach(() => {

    const nRServiceSpy = jasmine.createSpyObj('NetworkReducerService', ['getNumber']);

    TestBed.configureTestingModule({
      providers: [NetworkService,
        {provide: NetworkReducerService, useValue: nRServiceSpy}
      ]
    });
    service = TestBed.get(NetworkService);
    networkReducerServiceSpy = TestBed.get(NetworkReducerService);
  });

  it('should have the following fields', () => {

    networkReducerServiceSpy.getNumber.and.returnValue(1);

    expect(networkReducerServiceSpy.getNumber).toHaveBeenCalled();

    expect(service.testNumber).toBe(1);
  });

});

我想在我的NetworkReducerService中模拟这个getNumber方法

代码语言:javascript
复制
@Injectable({
  providedIn: 'root'
})
export class NetworkReducerService {
  getNumber() {
    return 1;
  }
}

我得到以下错误:

错误:未定义应为% 1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-16 13:09:32

你遇到了一个"a在b之前“的问题。在NetworkService类的构造函数中调用设置testNumber。因此,它在你第一次创建这个类的时候被调用--在你改变spy的值之前很久。要么在实例化服务之前设置该值,要么重构您的NetworkService以在方法中设置该值,该方法可以在创建后调用而不是在构造函数中进行测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58311977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档