首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角9 TestBed.inject & Provider重写

角9 TestBed.inject & Provider重写
EN

Stack Overflow用户
提问于 2020-02-18 12:34:44
回答 2查看 5.2K关注 0票数 11

当使用提供程序时,下面的选项是什么?因为TestBed.get已在角9中被弃用

代码语言:javascript
复制
TestBed.configureTestingModule({
  providers: [{ provide: MyClass, useClass: MyStub}]
});

const obj : MyStub = TestBed.get(MyClass);

真的是这样还是有更好的办法?

代码语言:javascript
复制
const obj : MyStub = TestBed.inject(MyClass) as unknown as MyStub;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 12:43:12

就所有意图和目的而言,您的MyStub至少应该是一个部分类或一个类,它扩展了它试图模拟的类,否则您的测试是“错误的”,所以如果是这样的话,您可以这样做:

代码语言:javascript
复制
const obj = TestBed.inject(MyClass);

如果存根上有不同的属性或不同的函数签名,也可以这样做:

代码语言:javascript
复制
const obj = TestBed.inject<MyStub>(MyClass as any);

但是一般来说,你的模仿者应该(部分地)和它所模仿的东西分享相同的签名,这也意味着没有必要去铸造

票数 11
EN

Stack Overflow用户

发布于 2020-11-04 08:32:12

代码语言:javascript
复制
let valueServiceSpy: jasmine.SpyObj<ValueService>;

beforeEach(() => {
  const spy = jasmine.createSpyObj('ValueService', ['getValue']);

  TestBed.configureTestingModule({
    providers: [
      { provide: ValueService, useValue: spy }
    ]
  });
  // This is new way to inject Spied Service
  valueServiceSpy = TestBed.inject(ValueService) as jasmine.SpyObj<ValueService>; 
});

然后在测试中

代码语言:javascript
复制
it('#getValue should return stubbed value from a spy', () => {
  valueServiceSpy.getValue.and.returnValue(yourValue);
  ...
});

参考

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

https://stackoverflow.com/questions/60281027

复制
相关文章

相似问题

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