2017-03-27 103 views
6

我已經配置了代碼推送的應用程序,除了笑話測試,它運作良好。它未能在渲染應用此錯誤:代碼推動破解笑話測試反應原生

TypeError: Cannot read property 'CheckFrequency' of undefined 

    at Object.<anonymous> (app/index.js:7:66) 
    at Object.<anonymous> (index.ios.js:5:12) 
    at Object.<anonymous> (__tests__/index.ios.js:4:12) 

在這一行:

const codePushOptions = { checkFrequency: codePush.CheckFrequency.MANUAL }; 

測試代碼是:

import App from '../index.ios'; 

it('renders correctly',() => { 
    const tree = renderer.create(
     <App />, 
); 
}); 
+1

你需要創建一個[模擬](HTTPS://facebook.github .io/jest/docs/manual-mocks.html)CodePush – Xeijp

+0

codePush varibale未定義或不是json' –

+0

@Assem Chelli是否解決了您的問題?碰到類似自己的東西... –

回答

0

你需要一個模擬彌補code-push工作,這行CodePush.CheckFrequency.MANUAL將始終生成null

1

在你的測試,你import App from '../index.ios';下,添加以下內容:

jest.mock('react-native-code-push',() => { 
    return jest.fn(() => ({ 
     InstallMode: jest.fn(), 
     CheckFrequency: jest.fn(), 
     CodePushComponent: jest.fn(), 
     codePushify: jest.fn() 
    })); 
}); 
+0

我相信這仍然會導致錯誤'TypeError:無法讀取屬性'手動'的未定義' –

0

什麼Tom Hall描述相似,這個模擬確實爲我工作:

jest.mock('react-native-code-push',() => { 
    const cp = (_: any) => (app: any) => app; 
    Object.assign(cp, { 
    InstallMode: {}, 
    CheckFrequency: {}, 
    SyncStatus: {}, 
    UpdateState: {}, 
    DeploymentStatus: {}, 
    DEFAULT_UPDATE_DIALOG: {}, 

    checkForUpdate: jest.fn(), 
    codePushify: jest.fn(), 
    getConfiguration: jest.fn(), 
    getCurrentPackage: jest.fn(), 
    getUpdateMetadata: jest.fn(), 
    log: jest.fn(), 
    notifyAppReady: jest.fn(), 
    notifyApplicationReady: jest.fn(), 
    sync: jest.fn(), 
    }); 
    return cp; 
}); 
+2

爲什麼咖喱?它不會像那樣通過。修改爲'const cp =(app:any)=> app後;'它通過。 – adam

2

我遇到這個問題來到同時整合codePush到我目前正在處理的React Native應用程序中。對我有效的是:

  1. 創建文件__mocks__/react-native-code-push.js

添加以下代碼到它:

const codePush = { 
    InstallMode: {ON_NEXT_RESTART: 'ON_APP_RESTART'}, 
    CheckFrequency: {ON_APP_RESUME: 'ON_APP_RESUME'} 
}; 

const cb = _ => app => app; 
Object.assign(cb, codePush); 
export default cb; 

在我index.js文件,我有:

import codePush from 'react-native-code-push'; 
import MyApp from './src/' 

const codePushOptions = { 
    installMode: codePush.InstallMode.ON_NEXT_RESTART, 
    checkFrequency: codePush.CheckFrequency.ON_APP_RESUME 
}; 

export default codePush(codePushOptions)(MyApp);