javascript - 在 Typescript 单元测试中模拟

标签 javascript unit-testing typescript mocking

问题是,如果对象足够复杂(在任何强类型语言中都是如此),Typescript 中的模拟可能会变得棘手。你通常会模拟一些额外的东西只是为了编译代码,例如在 C# 中,你可以使用 AutoFixture 或类似的东西。另一方面,Javascript 是动态语言,可以只模拟测试运行所需的对象的一部分。

所以在 Typescript 单元测试中,我可以使用 any 类型声明我的依赖关系,从而轻松模拟它。您看到这种方法有什么缺点吗?

let userServiceMock: MyApp.Services.UserService = {
    // lots of thing to mock
}

对比

let userServiceMock: any = {
    user: {
         setting: {
             showAvatar: true
         }
    }
}

最佳答案

我在 TypeScript 中进行单元测试的经验明确表明,保留所有模拟对象的类型是值得的。当您将模拟保留为 any 类型时,重命名期间就会出现问题。 IDE 无法正确发现应该更改哪些 usersettings 参数。当然,手动编写具有完整接口(interface)的模拟对象确实很费力。

幸运的是,有两个 TypeScript 工具可以创建类型安全的模拟对象:ts-mockito (灵感来自 Java mockito )和 typemoq (灵感来自 C# Moq )。

关于javascript - 在 Typescript 单元测试中模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39792156/

相关文章:

javascript - 对 jQuery 加载的 div 中的 li 进行排序

cocoa - 添加测试目标时 Xcode 5 抛出 "Library not loaded"错误

c# - 无法在 Visual Studio 中关联测试用例

javascript - 修改数组所有元素的值

javascript - Sequelize - Node Js - 枚举和整数字段搜索选项

javascript - Fs 模块错误

javascript - Google reCaptcha 在 React.js 中工作?

java - 使用 Mockito 调用最终类静态方法的模拟对象

typescript - 以嵌套方式将界面中的所有字段设为只读

angular - 如何将静态内容添加到我的水平 Angular 垫表中?