我们正试图使用以下代码导入react native fetch blob包:
const RNFetchBlob = require('react-native-fetch-blob');
const firebase = require('firebase');
然而,当我们尝试构建时,意外的令牌导入会出现语法错误,如下所示。
C:\Users\。。。\node_modules\react native fetch blob\index.js:5
import{
SyntaxError:Object.exports.runInThisContext(vm.js:76:16)处的意外令牌导入
模块_compile(模块.js:513:28)处的
对象.Module_extensions..js(模块js:550:10)处的
模块加载(模块js:458:32)处的
函数.Module_load(模块.js:417:12)处的409:3)
at Module.require(Module.js:468:17)
at require(internal/Module.js:20:19)
at Object。(C:\Users\…\build\cloud\file.js:159:243)在模块中_编译(module.js:541:32)
我们使用的是ES6,我们的.babelrc文件如下所示
"plugins": [
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
],
"presets": ["react-native","es2015",]
有解决办法吗?如有任何帮助,我们将不胜感激!
谢谢!
我能够通过创建一个mock for react native fetch blob(在我的例子中是rn fetch blob)来解决这个问题。这里建议的模拟对我有效:https://github.com/wkh237/react-native-fetch-blob/issues/212#issuecomment-340706825
作为@screlli,我还希望mock发生在一个单独的地方,这样所有测试都可以使用它。将以下代码放在/mocks/rect-native-fetch-blob.js中似乎对我有用:
constexistsLock=jest.fn();existsLock.mockReturnValueOnce({then:jest.fn()});
export default {
DocumentDir: () => {},
ImageCache: {
get: {
clear: () => {},
},
},
fs: {
exists: existsMock,
dirs: {
MainBundleDir: () => {},
CacheDir: () => {},
DocumentDir: () => {},
},
},
};
它是@SoundBlaster解决方案的变体,只是在一个全局模拟文件中。这样,我就不需要导入或隐式地模拟测试代码中的任何内容。