【问题标题】:How to mock an object with Jasmine如何用 Jasmine 模拟对象
【发布时间】:2021-07-15 19:38:10
【问题描述】:

在我的 DI 设置中,我有一个单例类,它有几个我想在测试时禁用的功能。

在其他一些框架/语言中,我会提供该对象的模拟,其函数的实现是空的。

我想做类似的事情


TestBed.configureTestModule({
    imports: […],
    providers: [
        { provide: MyClass, useValue: spyAllFunctions(MyClass).and.stub() }
    ]
})

我已经看过spyAllFunctions,但并没有让我完全了解(或者我在滥用它),现在我只是自己提供存根,但我想知道是否有比

{
    provide: MyClass, deps: [MyClassDependency], useFactory: (dep) => ({
      method1: () => { },
      method2 () => { }
    })
}

谢谢!

【问题讨论】:

  • 我认为您正在寻找 createSpyObj 函数 (jasmine.github.io/2.5/introduction)
  • 您介意为我提供一个关于如何实现我的意图的sn-p吗?我应该传入什么字符串作为第一个参数?是否所有的间谍都被() => {} 或类似的东西打断了?

标签: angular unit-testing mocking jasmine stubbing


【解决方案1】:

enno.void 是对的,我认为你需要createSpyObj 函数。

let mockMyClass: any;

// first string is the name of the class (can be anything), second argument is
// an array of strings of methods you want to be able to mock
mockMyClass = jasmine.createSpyObj('my-class', ['method1', 'method2']);
.....
TestBed.configureTestModule({
    imports: […],
    providers: [
        { provide: MyClass, useValue: mockMyClass }
    ]
})

检查这个link

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多