在使用Jasmine和TypeScript测试react-native时找不到模块“View”

时间:2017-08-16 15:43:40

标签: unit-testing react-native jasmine

我正在尝试使用Jasmine测试一个简单的(“空”)react-native组件。但是当我尝试访问任何反应本机组件时,我收到错误...

在我的配置文件(jasmine.json)中,我有:

{
  "spec_dir": ".",
  "spec_files": [
    "src/*.spec.tsx"
  ],
  "helpers": [
    "./node_modules/ts-node/register.js"
  ]
}

我的package.json

"react": "16.0.0-alpha.12",
"react-native": "0.45.1",

"jasmine": "^2.6.0",
"ts-node": "^3.3.0",

我在package.json上的测试脚本

"test": "jasmine --config=jasmine.json"

我的测试

import * as React from 'react';
import App from './App';

import { createRenderer } from 'react-test-renderer/shallow';
import { StyleSheet, Text, View } from 'react-native';

console.log('View', View); // error

错误:

Error: Cannot find module 'View'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.get View [as View] (...\expo-ts-example\node_modules\react-native\Libraries\react-native\react-native-implementation.js:56:23)
    at Object.<anonymous> (...\expo-ts-example\src\App.spec.tsx:7:21)
    at Module._compile (module.js:571:32)
    at Module.m._compile (...\expo-ts-example\node_modules\ts-node\src\index.ts:392:23)
    at Module._extensions..js (module.js:580:10)
    at Object.require.extensions.(anonymous function) [as .tsx] (...\expo-ts-example\node_modules\ts-node\src\index.ts:395:12)

我的组件上的任何测试都会失败,因为它使用的“root”元素是View

为什么会出现此错误?有什么方法可以用Jasmine来测试而不是Jest吗?

1 个答案:

答案 0 :(得分:2)

View是一个本机元素,因此当您在本机环境之外运行时,它不可用于Jasmine环境。

这通常可以通过模拟整个react-native组件API(例如使用类似react-native-mock之类的东西)或使用浅层渲染方法(如Enzyme)来解决。两者都适用于任何测试框架。

那就是说,经过一段时间编写这些测试之后,我发现如果我重构代码以使所有函数中的逻辑与react-native无关,并且端到端测试覆盖相互作用,然后组件级测试变得多余,并且几乎没有价值。