栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将同一提供程序的两个实例嵌套JS

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将同一提供程序的两个实例嵌套JS

您正在混合单元测试和端到端(e2e)测试的概念。您正在导入模块,同时直接导入单个提供程序。我假设您导入的模块之一也可以导入

ExamCacheResultService
。这样,您的测试应用程序中就有两个。调用时
app.get(ExamCacheResultService)
,您将获得在测试模块中直接声明的实例。但是呼叫时使用的
finishApplication
是另一个。确定要测试的内容并遵循以下原则:

单元测试

在单元测试中,您要测试与其他依赖项(例如

UserService
或)隔离的单个提供者/控制器
UsersController
。您将此提供程序及其注入的依赖项作为模拟导入。您不导入模块。

假设我们有一个

UsersService
取决于的
DatabaseConnection

export class UsersService {  constructor(private connection: DatabaseConnection) {}  // ...}

在单元测试中,您导入

UsersService
,模拟,
DatabaseConnection
导入
UsersModule

module = await Test.createTestingModule({  providers: [    UsersService,    { provide: DatabaseConnection, useClass: DbConnectionMock },  ],}).compile();databaseMock = module.get(DatabaseConnection);databaseMock.findMany.mockReturnValue([]);

端到端测试

在端到端测试中,您要测试整个应用程序,并由此测试您已进行单元测试的部分之间的交互。因此,您不必导入单个提供程序,而是导入一个模块,通常是

AppModule
。然后,您可以覆盖单个提供程序,例如,如果您要在内存数据库中而不是实际数据库上进行测试,或者要模拟外部API的结果。

const moduleFixture = await Test.createTestingModule({      imports: [AppModule],    }).overrideProvider(DatabaseConnection).useClass(InMemoryDatabaseConnection)      .overrideProvider(ExternalApiService).usevalue(externalApiMock)      .compile();    app = moduleFixture.createNestApplication();    externalApiMock.get.mockReturnValueonce({data: [...]});    await app.init();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号