如何用 Jasmine 模拟对象

How to mock an object with Jasmine

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

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

我想做类似的事情


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

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

更好的方法
{
    provide: MyClass, deps: [MyClassDependency], useFactory: (dep) => ({
      method1: () => { },
      method2 () => { }
    })
}

谢谢!

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