使用Nest.js测试时,如何针对不同场景多次使用Override Provider?
How can I use Override Provider multiple times for different scenarios when using Nest.js to test?
我正在尝试使用 Nest.js(和 Jest)对文件进行单元测试,如下所示:
import { Test, TestingModule } from '@nestjs/testing';
import { MyService } from 'myService';
import { DependencyService } from 'dependencyService';
describe('#mainMethod', () => {
let myService, dependencyService;
beforeAll(async () => {
let mockDependencyService = {
method1: jest.fn(() => true)
};
const module: TestingModule = await Test.createTestingModule({
providers: [
MyService,
DependencyService,
]
})
.overrideProvider(DependencyService).useValue(mockDependencyService)
.compile();
myService = module.get<MyService>(MyService);
dependencyService = module.get<DependencyService>(DependencyService);
});
it('should be ok', () => {
// any test
})
});
当这样写时,我能够测试 method1
from DependencyService
returns true
.
的场景
测试来自 method1
的不同响应的最佳方法是什么?我是否应该将其全部包装在 BeforeEach
中,创建另一个 describe
块,更改 mockDependencyService.method1
的 return,然后重新创建模块?有更好的方法吗?
谢谢!
我可能会像这样模拟模块作为一个普通函数:
let mockDependencyService = {
method1: () => true
};
然后监视每个测试的实例:
jest.spyOn(myService, 'method1').mockReturnValue(false)
myService.method1()
// useless expectation for demo purposes
expect(myService.method1).toHaveBeenCalled()
这让您可以根据每个测试的需要为每个测试准备起始环境。
我正在尝试使用 Nest.js(和 Jest)对文件进行单元测试,如下所示:
import { Test, TestingModule } from '@nestjs/testing';
import { MyService } from 'myService';
import { DependencyService } from 'dependencyService';
describe('#mainMethod', () => {
let myService, dependencyService;
beforeAll(async () => {
let mockDependencyService = {
method1: jest.fn(() => true)
};
const module: TestingModule = await Test.createTestingModule({
providers: [
MyService,
DependencyService,
]
})
.overrideProvider(DependencyService).useValue(mockDependencyService)
.compile();
myService = module.get<MyService>(MyService);
dependencyService = module.get<DependencyService>(DependencyService);
});
it('should be ok', () => {
// any test
})
});
当这样写时,我能够测试 method1
from DependencyService
returns true
.
测试来自 method1
的不同响应的最佳方法是什么?我是否应该将其全部包装在 BeforeEach
中,创建另一个 describe
块,更改 mockDependencyService.method1
的 return,然后重新创建模块?有更好的方法吗?
谢谢!
我可能会像这样模拟模块作为一个普通函数:
let mockDependencyService = {
method1: () => true
};
然后监视每个测试的实例:
jest.spyOn(myService, 'method1').mockReturnValue(false)
myService.method1()
// useless expectation for demo purposes
expect(myService.method1).toHaveBeenCalled()
这让您可以根据每个测试的需要为每个测试准备起始环境。