【问题标题】:Mock or override a module import in an angular-cli unit test在 angular-cli 单元测试中模拟或覆盖模块导入
【发布时间】:2016-10-13 12:04:37
【问题描述】:

您好,我正在使用使用 angular-cli 开发的 Angular 2。

我有一个简单的流媒体服务,它由一个导入的流媒体模块组成。我想用另一个模拟模块模拟导入的模块,但不知道如何。

我的服务等级是这样的

import { streaming } from './streaming'

@Injectable()
export class StreamingService {


  constructor() {}

  streaming = streaming;
}

而我的测试是标准生成的测试规范文件

import { streaming } from './streaming'
import { mockStreaming } from './mock-streaming'

    describe('Service: Streaming', () => {
      beforeEach(() => {


        spyOn(streaming);
        TestBed.configureTestingModule({
          providers: [StreamingService],
          imports: mockStreaming
        })

     });

我想知道是否应该将流属性作为参数包含在构造函数中,但我不想那样做。

我可以在 karma.conf 或 test.ts 文件中做些什么吗?

【问题讨论】:

    标签: angular karma-runner karma-jasmine angular-cli


    【解决方案1】:

    您可以创建一个扩展StreamingService 的MockStreamingService:

    @Injectable()
    export class MockStreamingService {
    
    
      constructor() {}
      //And then mock methods, properties etc...
    }
    

    然后在你的测试中:

    describe('Service: Streaming', () => {
      beforeEach(() => {
    
    
        spyOn(streaming);
        TestBed.configureTestingModule({
          providers: [{provide:StreamingService, useClass:MockStreamingService}]
        })
    
     });
    

    【讨论】:

    • 我不认为这对我有用,我定义的流类是一个简单的 es6 模块,即let connect = () => {//connect code} let streaming = { connect: connect} export streaming 所以我想用间谍或存根淘汰公共方法
    • 你可以在 jasmine 中使用spyOn 来为方法添加一个spy。如果你要测试的是StreamingService,你不应该mock服务本身而是它的依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多