2017-04-14 66 views
1

我正在写一个阵营本地应用程序中,我有一个屏幕组件,我需要测试:使用自定义嘲笑与开玩笑

MyScreen.js

import React, { Component } from "react"; 
import CustomTable from "./CustomTable"; 

export default MyScreen extends Component { 
    render() { 
    return <CustomTable />; 
    } 
} 

CustomTable.ios.js

import React, { Component } from "react"; 
import { View } from "react-native"; 
import TableView from "react-native-tableview"; 

export default MyScreen extends Component { 
    render() { 
    return (
     <View> 
     ...some stuff 
     <TableView /> 
     </View> 
    ); 
    } 
} 

react-native-tableview调用了一些iOS特定的代码,所以我嘲笑了它只需返回中的Android版本(CustomTable.android.js)文件夹

__mocks__/CustomTable.ios.js

import CustomAndroidTable from "../CustomTable.android"; 
export const CustomTable = CustomAndroidTable; 

我想要做的就是测试MyScreen.js与玩笑,但我想它使用__mock__/CustomTable.ios。我该如何去做到这一点?这甚至可能与Jest?我目前的测试文件看起来像:

tests/MyScreen.test.js

import React from "react"; 
import renderer from "react-test-renderer"; 
import MyScreen from "../src/MyScreen"; 

describe("test",() => { 
    it("works",() => { 
    jest.mock("../src/CustomTable.ios"); 
    const tree = renderer.create(
    <MyScreen />, 
).toJSON(); 
    expect(tree).toMatchSnapshot(); 
}); 

但它仍然呼吁的CustomTable.ios原始版本。我究竟做错了什么?

回答

1

您应该在套件测试之外调用jest.mock。它应该在您导入后立即生效。

import React from "react"; 
import renderer from "react-test-renderer"; 
import MyScreen from "../src/MyScreen"; 

jest.mock("../src/CustomTable.ios"); 

describe("test",() => { 
    it("works",() => { 
    const tree = renderer.create(
    <MyScreen />, 
).toJSON(); 
    expect(tree).toMatchSnapshot(); 
});