【问题标题】:Jasmine SpyObj doesn't return mocked objectJasmine SpyObj 不返回模拟对象
【发布时间】:2018-03-01 18:17:59
【问题描述】:

我正在尝试测试以下服务。

@Injectable()
export class TranslationService {

  language = 'NL';

  constructor(contextService: ContextService) {
    let context = contextService.getContext();
    this.language = context.language;
  }
}

实际测试:

describe('TranslationService', () => {

  let service: TranslationService;
  let contextServiceSpy: jasmine.SpyObj<ContextService>;

  beforeEach(() => {

    const contextSpy = jasmine.createSpyObj('ContextService', ['getContext']);
 
    TestBed.configureTestingModule({
      providers: [
        TranslationService,
        {provide: ContextService, useValue: contextSpy}]
    });

    service = TestBed.get(TranslationService);
    contextServiceSpy = TestBed.get(ContextService);
  
  });

  it('should create an instance', () => {

    const context: Context = {
      language: 'EN'
    };

    contextServiceSpy.getContext.and.returnValue(context);

    expect(service).toBeDefined();
    expect(contextServiceSpy.getContext.calls.count()).toBe(1, 'spy method was called once');
    expect(contextServiceSpy.getContext.calls.mostRecent().returnValue).toBe(context);
  });

});

现在运行我的测试时,它返回错误:

TypeError: Cannot read property 'language' of undefined

这意味着 spy 没有返回我的模拟上下文。但我不知道为什么它不是。有人吗?

我用https://angular.io/guide/testing#service-tests

角度 5.2.4

茉莉花2.8.0

【问题讨论】:

    标签: javascript angular jasmine2.0


    【解决方案1】:

    在模拟 getContext 存根之前调用服务构造函数。

    应该是:

    contextServiceSpy = TestBed.get(ContextService);
    contextServiceSpy.getContext.and.returnValue(context);
    service = TestBed.get(TranslationService);
    

    【讨论】:

    • 噗......非常感谢!现在它按预期工作。从文档 (angular.io/guide/testing#service-tests) 中不清楚,似乎他们也在调用 '..and.returnValue(..)':masterService = TestBed.get(MasterService); valueServiceSpy = TestBed.get(ValueService);
    • 不客气。这可以在文档中以这种方式完成,因为在服务类构造时不会调用模拟方法。
    • 啊好吧!清除!非常感谢。
    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多