【发布时间】:2018-05-05 17:21:24
【问题描述】:
当我创建一个 npm 包时,有时它会面临需要回退旧的依赖包版本。
如果新版本有新的api,我可以这样写代码:
import pkg from 'some-pkg';
const isNewVersion = pkg.newVersionApi !== 'undefined';
if (isNewversion) {
pkg.newVersionApi();
} else {
pkg.oldVersionApi(); // backward compatible api
}
并且使用这种模式,当我想编写测试时,我只能测试installed version 代码。其他版本的代码无法测试。
例如,在 React v15 和 v16 中,React v16 有新的 API Portal。在 Portal 发布之前,v15 有unstable_renderSubtreeIntoContainer api 来实现类似的功能。
所以 React 的代码应该是这样的:
import ReactDOM from 'react-dom';
const isV16 = ReactDOM.createPortal !== 'undefined';
if (isV16) {
ReactDOM.createPortal(...);
} else {
ReactDOM.unstable_renderSubtreeIntoContainer(...);
}
所以我想问有没有什么方法可以用different dependency version进行测试?
目前,我想到的一种方法是再次安装另一个版本并进行测试。但它只能在本地进行。它不能在 ci 上工作,也不能一起计入覆盖范围。
我认为这不仅适用于反应测试。它可能面临 node.js 测试。任何建议都可以讨论。
更新
这个问题可能与在 npm 中安装 two versions dependency 有关。但我知道目前安装两个版本的依赖是不可行的。
【问题讨论】:
-
K.I.S.S.原则:这里最快(也是技术最少)的解决方案是使用您的应用程序的两个单独副本,每个副本都有您要测试的不同包版本。这对于
git来说是微不足道的,因为您可以 1) 克隆您的应用两次或 2) 使用两个单独的分支。 -
没错。使用单独的分支是一种方法。但如果这是一个开源项目或合作项目。很难控制合并分支问题。因为我们需要告诉贡献者遵循测试路线图,例如在两个分支上更新您的更改并对其进行测试。
标签: javascript node.js reactjs testing npm