2017-03-27 16 views
6

Tôi đã cấu hình một ứng dụng để đẩy mã, nó hoạt động tốt, ngoại trừ các bài kiểm tra jest. Nó không thành công trong việc cung ứng cho lỗi này:Mã Đẩy kiểm tra jest phá vỡ cho phản ứng bản địa

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) 

trong dòng này:

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

Các mã kiểm tra là:

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

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

Bạn cần phải tạo một [giả] (https: //facebook.github .io/jest/docs/manual-mocks.html) cho CodePush – Xeijp

+0

codePush varibale không được xác định hoặc không phải là một json ' –

+0

@Assem Chelli bạn đã giải quyết vấn đề của mình chưa? Chạy vào một cái gì đó tương tự bản thân mình ... –

Trả lời

0

Bạn cần một mô hình lên cho code-push để làm việc, điều này dòng CodePush.CheckFrequency.MANUAL sẽ luôn sản xuất null.

1

Trong các thử nghiệm của bạn, bên dưới import App from '../index.ios'; của bạn, thêm những điều sau đây:

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

Tôi tin rằng điều này sẽ vẫn dẫn đến lỗi 'LoạiError: Không thể đọc thuộc tính 'MANUAL' của undefined' –

0

Tương tự như những gì Tom Hall mô tả, mô hình này không làm việc cho tôi:

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

Tại sao lại là currying? Nó không vượt qua như thế. Sau khi sửa đổi thành 'const cp = (app: any) => app;' nó đi qua. – adam

2

Tôi đã xem qua vấn đề này trong khi tích hợp codePush vào ứng dụng React Native Tôi hiện đang làm việc. Điều gì có hiệu quả đối với tôi là:

  1. Tạo tệp __mocks__/react-native-code-push.js.

Thêm đoạn mã sau vào nó:

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; 

Mở tập tin index.js tôi, tôi có:

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); 
Các vấn đề liên quan