将 Rewire 与 TypeScript 结合使用

2023-12-21

我正在使用 TypeScript 开发一个 React-Native 项目。为了编写我的单元测试,我想使用babel-插件-重新布线 https://github.com/speedskater/babel-plugin-rewire模拟我的模块导入。然而,TypeScript 添加了一个_1从 ES6 转换为 ES5 时,在导入末尾添加后缀,这会破坏我的测试代码。

考虑以下:

import Test from 'test-file';

这可能会被 TypeScript 转换为:

var test_file_1 = require('test-file');

要使用 Rewire 插件模拟 Test 类,我必须编写:

ComponentToTest.__Rewire__('Test', TestMock);

但由于导入已被重命名,这将被破坏。

虽然这是按设计 https://github.com/Microsoft/TypeScript/issues/6264,我很想知道是否有任何解决方法。

Thanks.


我不知道 Babel-Plugin-Rewire,但如果你单独使用 TypeScript 和 Rewire,包括将 ES6 模块编译为 ES5,你可以轻松地直接模拟生成的文件导入。

IE。这应该有效:

ComponentToTest.__set__('test_file_1', { default: TestMock });

这确实取决于 _1 后缀,在以后的 TypeScript 版本中或者如果您对 TypeScript 代码本身进行某些更改,该后缀可能会发生变化。我认为这风险相当低。

完整重新接线 + TS 示例:

组件.ts:

import DefaultComponent from "other-component";
import { IndividuallyExportedComponent } from "yet-another-component";

// ... Do something worth testing

组件测试.ts:

import rewire = require("rewire");
let RewiredComponent = rewire("../src/Component");

let defaultComponentMock = { /* Make a mock of your dependency */ };
RewiredComponent.__set__('other_component_1', {
    default: defaultComponentMock
});

let individuallyExportedMock = { /* Make a mock of your dependency */ };
RewiredComponent.__set__('yet_another_component_1', {
    IndividuallyExportedComponent: individuallyExportedMock
});

// RewiredComponent has the wrong type now. YMMV, but I'm doing type-wrangling
// that looks something like:

import * as RealComponent from "../src/Component";
let Component: typeof RealComponent & typeof RewiredComponent = <any> RewiredComponent;

// 'Component' now has the same type as the real module, plus the
// .__set__ etc methods from Rewire.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Rewire 与 TypeScript 结合使用 的相关文章

  • Mapbox 打字稿

    通过关注这个项目 我成功地让 Leaflet 与 Angular 2 和 Webpack 一起工作 Angular 2 传单启动器 https github com haoliangyu angular2 leaflet starter 我
  • 在不同类型检查(tsconfig)上创建编译器错误

    有人可以解释为什么这不会引发错误吗 interface A id number const a A id 5 const testA boolean a 1 works but why interface B id number const
  • 使用unittest时如何知道每次测试花费的时间?

    Unittest 仅显示运行所有测试所花费的总时间 但不单独显示每个测试所花费的时间 使用unittest时如何添加每个测试的计时 我想 目前不可能 http bugs python org issue4080 http bugs pyth
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • KeyboardAvoidingView 适用于 EXPO 但不适用于 APK?

    我买了这个主题 它在 Expo 中运行完美 但是一旦我构建 APK 键盘就会覆盖整个屏幕 并且无法按预期工作 我正在使用 expo 进行测试 效果很好 return
  • Python unittest - 使用列表断言字典

    在为我的班级编写一些测试时 我遇到了有趣的简单问题 我想断言两个字典包含一些列表 但是这个列表可能不会以相同的方式排序 gt 这会导致测试失败 Example def test myobject export into dictionary
  • 无需编译的 ES6 单元测试

    我无法找到任何 Mocha 或任何其他通过 Gulp 直接在 ES6 代码上运行的单元测试框架的示例 没有 Babel Webpack 等 我找到了一个在浏览器中使用 ES6 代码运行 Mocha 的示例 经过一些修改 但它不是自动化的 有
  • 排除 tsconfig.json 中的子目录

    我已经安装了 TypeScript 1 8 2 并使用 Visual Studio 2015 我有一个简单的项目 在从 tsconfig json 文件中排除文件夹时遇到问题 问题是我想排除文件typings browser d ts 和文
  • 如何对 NestJS 中的控制器应用防护进行单元测试?

    我在 NestJS 中配置了一个控制器 我想检查是否设置了适当的防护 有人有如何完成此操作的示例吗 这个 删节的 示例作为一个应用程序可以正常工作 所以我只是在测试指导之后 您会注意到在用户测试中有一些我正在调用的测试Reflect get
  • 找不到本地“typescript”包。“@ngtools/webpack”包 Angular 2

    我在这里搜了一下 Angular 2 ngtools webpack AOT https stackoverflow com questions 42651383 angular 2 ngtools webpack aot 但对我不起作用
  • 某些设备上的启动画面扭曲

    我在修复 Android 上的启动画面扭曲问题时遇到问题 我正在使用 React Native 请注意 这种情况仅发生在某些设备上 例如 我有一台 Android 版本为 4 2 2 的三星 启动画面不扭曲 而 Android 版本为 8
  • 使用mockery和sinon模拟类方法

    我正在学习使用带有 sinon 的节点模块模拟进行单元测试 仅使用模拟和普通类 我就可以成功注入模拟 不过 我想注入一个 sinon 存根而不是一个普通的类 但我在这方面遇到了很多麻烦 我试图嘲笑的班级 function LdapAuth
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 如何修复语法错误:无法在模块外部使用 import 语句?

    我对这一切都很陌生 我正在尝试将 Node Typescript 后端添加到我的 Angular 项目中 但是导入express后总是报错 ERROR SyntaxError Cannot use import statement outs
  • VirtualizedList:您有一个很大的列表,更新速度很慢

    我使用 FlatList 来处理大量项目 我收到来自 Expo XDE 的以下警报 VirtualizedList 您有一个更新速度很慢的大列表 make 确保你的 renderItem 函数渲染遵循 React 的组件 性能最佳实践 例如
  • Maven 未运行 Spring Boot 测试

    我有一个要测试的 Spring Boot REST API 我可以在 Eclipse 中手动运行测试 无需 Maven 并通过将应用程序作为 JUnit 测试运行 它运行良好并显示结果 但是mvn test正如您将在下面发现的那样 它不起作
  • Rxjs 可观察等待直到满足某些条件

    我有以下重试逻辑来重试操作 对于单个请求来说它工作得很好 对于多个正在进行的请求 我想在重试之前等待现有的重试逻辑完成 handleError errors Observable
  • 运行 tsc(TypeScript 编译器)时如何复制 dist 或 build 文件夹中的 package.json

    我有一个 TypeScript React 组件 它使用package json文件 参见屏幕截图 然后我运行tsc为了在我的中将其转译为 es5dist文件夹但package json文件没有被复制 请注意 在屏幕截图中 我手动将其复制到
  • “DeploymentItem”属性是什么意思?

    假设我们有一个简短的程序 namespace ConsoleTryIt static class Program static void Main string args var sum Add 1 2 private static int
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository

随机推荐

  • Matlab:是否可以创建信号处理程序(.m 脚本)

    我查看了文档等 但没有看到任何明显的东西 我想要一个可以拦截的信号处理程序 C 或其他一些可用于中断长时间运行的脚本 每个离散计算通常 Matlab 确实有 COM 的事件处理程序 但它仅限于 Windows 而我处于 nix 环境中 如果
  • 在 AutoHotkey 中按住鼠标左键

    I want a script where pressing F1 makes AutoHotkey hold down the left mouse button I then want the script to release the
  • “事件驱动”和“面向对象”编程之间的关系是什么?

    如今 我几乎到处都听到 事件驱动 编程 维基百科说 在计算机编程中 事件驱动编程是一种编程范例 其中程序的流程由用户操作 鼠标单击 按键 传感器输出或来自其他程序 线程的消息等事件确定 事件驱动编程是图形用户界面和其他应用程序 例如 Jav
  • UIPicker 检测当前选定行上的点击

    我有一个UIPickerView和方法didSelectRow点击 a 时不会调用选定的行 我需要处理这个案子 有任何想法吗 首先 使类符合UIGestureRecognizerDelegate协议 然后 在视图设置中 UITapGestu
  • Python CSV 阅读器返回行作为列表

    我正在尝试使用 python 解析 CSV 并希望能够对一行中的项目进行索引 以便可以使用以下命令访问它们row 0 row 1 等等 到目前为止 这是我的代码 def get bitstats url http bitcoincharts
  • Swift 将数据从子视图发送到父视图控制器

    我正在开发一个应用程序 其中有一个视图控制器和子视图 在子视图上我正在加载谷歌地图 在主视图上我有一个标签 我的问题是如何将数据从子视图 地图地理位置 传递到主视图上的标签 并在使用 Swift 更新位置时更新该数据 我发现的所有教程都使用
  • 时间:2019-05-17 标签:c#progressbarnotupdate

    我有一个 ProgressBarWindow 它有一个进度条和一个取消按钮 我用它来报告文件 I O 的进度 然而 尽管所有工作都是在后台工作人员中完成的 但 ProgressBarWindow 的 UI 线程和我的主窗口都挂起 进度条已渲
  • 召回率和精确率后的分类准确率

    我只是想知道这是否是计算分类准确性的合法方法 获取精确召回阈值 对于每个阈值 对连续 y scores 进行二值化 从列联表 混淆矩阵 计算它们的准确性 返回阈值的平均准确度 recall precision thresholds prec
  • 复制构造函数和防御性复制

    什么是复制构造函数 有人可以分享一个有助于理解的小例子吗防御性复制原则 这是一个很好的例子 class Point final int x final int y Point int x int y this x x this y y Po
  • PHP Twitter API 分块上传问题:分段加起来不等于提供的总文件大小

    所以我将 Twitter API 集成到一个应用程序中 我需要它能够发布图像 视频和动画 GIF 我正在使用 php5 6 和 J7mbo twitter api php 包 到目前为止我的代码如下 file fopen realpath
  • 将文本项目符号添加到 C# 表单

    我正在用 C 创建一个表单 需要在表单上显示文本 我需要一些文本显示在带项目符号的无序列表中 使用标签时可以做到这一点吗 或者富文本框 我没有使用 ASP NET 这是针对桌面应用程序的 我的消息应该是这样的 要继续 请选择以下操作之一 单
  • IOError:[Errno 2]没有这样的文件或目录(当它确实存在时)Python [重复]

    这个问题在这里已经有答案了 我正在通过 python 中的 uart 传输文件文件夹 下面您可以看到简单的功能 但有一个问题 因为我收到如标题所示的错误 IOError Errno 2 No such file or directory 1
  • 在 EXCEL 中构建 SQL SELECT 语句

    我正在尝试在 Excel 中构建 SQL 语句 Sample 我正在尝试构建 sql 语句 但只想在 DIM 列中有值时添加列 因此 在 SQL 中执行时 SQL 看起来很整洁 没有任何语法错误 这里如何消除 from 关键字之前的多余逗号
  • 酿造更新破坏了什么?

    自制程序工作正常 直到我做了一个brew update 好几个月没有更新了 brew 更新完成后 每个brew命令会产生相同 相似的错误消息 usr local Library Homebrew global rb 6 in require
  • 两个菜单 Android 应用程序

    我工作的公司有一个 iOS 应用程序 它有两个滑动菜单 左侧一个用于导航 右侧一个显示应用程序范围的上下文信息和操作 iOS 应用程序有一个类似于 ActionBar 的小部件 在显示任一菜单时 意味着它是隐藏的 它会随主内容窗格一起滑动
  • TypeError:错误的参数类型类(预期模块)与控制器有关

    所以我有一个名为 guest controller rb 的控制器 如下所示 class GuestsController lt ApplicationController include Data def index display da
  • NSubstitute - 检查传递给方法的参数

    我们目前正在从 RhinoMocks 迁移到 NSubstitute 我有一个接受类型对象的方法DatabaseParams 该类具有以下结构 简化 public class DatabaseParams public string Sto
  • HTTP协议的PUT和DELETE及其在PHP中的使用

    介绍 我已阅读以下内容 超文本传输 协议 HTTP 是网络的生命 每次传输文档或发出 AJAX 请求时都会用到它 但令人惊讶的是 HTTP 在一些 Web 开发人员中相对陌生 HTTP 动词构成了 统一接口 约束的主要部分 并为我们提供了与
  • 当数据库中添加新行时,必须调用外部命令行程序

    当向数据库中的一个表添加新行时 MySQL 数据库是否可以调用外部 exe 文件 我需要监视数据库中的更改 因此当进行相关更改时 我需要在数据库之外执行一些批处理作业 查德 伯奇 Chad Birch 有一个好主意 使用MySQL 触发器和
  • 将 Rewire 与 TypeScript 结合使用

    我正在使用 TypeScript 开发一个 React Native 项目 为了编写我的单元测试 我想使用babel 插件 重新布线 https github com speedskater babel plugin rewire模拟我的模