diff --git a/.travis.yml b/.travis.yml index fc6cec052..414ae8625 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,18 +9,11 @@ branches: - /^greenkeeper/.*$/ env: - - CXX=g++-4.8 + - MONGODB_VERSION=3.2.13 services: mongodb - -addons: - apt: - sources: - - mongodb-3.0-precise - - ubuntu-toolchain-r-test - packages: - - mongodb-org-server - - g++-4.8 - -script: npm test && ./run_integration.sh +before_script: +- npm install -g mongodb-runner +- mongodb-runner start +script: npm test -- --maxWorkers=4 && ./run_integration.sh after_script: cat ./coverage/coverage-final.json | ./node_modules/codecov.io/bin/codecov.io.js && rm -rf ./coverage diff --git a/src/CoreManager.js b/src/CoreManager.js index 87dcf3f41..997f9cf3d 100644 --- a/src/CoreManager.js +++ b/src/CoreManager.js @@ -333,6 +333,14 @@ module.exports = { return config['StorageController']; }, + setAsyncStorage(storage: any) { + config['AsyncStorage'] = storage; + }, + + getAsyncStorage() { + return config['AsyncStorage']; + }, + setUserController(controller: UserController) { requireMethods('UserController', [ 'setCurrentUser', diff --git a/src/Parse.js b/src/Parse.js index 7e6255bff..ed8a9587a 100644 --- a/src/Parse.js +++ b/src/Parse.js @@ -45,6 +45,17 @@ var Parse = { CoreManager.set('JAVASCRIPT_KEY', javaScriptKey); CoreManager.set('MASTER_KEY', masterKey); CoreManager.set('USE_MASTER_KEY', false); + }, + + /** + * Call this method to set your AsyncStorage engine + * Starting Parse@1.11, the ParseSDK do not provide a React AsyncStorage as the ReactNative module + * is not provided at a stable path and changes over versions. + * @param {AsyncStorage} storage a react native async storage. + * @static + */ + setAsyncStorage(storage: any) { + CoreManager.setAsyncStorage(storage); } }; diff --git a/src/StorageController.react-native.js b/src/StorageController.react-native.js index 7c2c6a1b8..43643cd90 100644 --- a/src/StorageController.react-native.js +++ b/src/StorageController.react-native.js @@ -10,22 +10,18 @@ */ import ParsePromise from './ParsePromise'; - -// RN packager nonsense -let AsyncStorage; -try { - // for React Native 0.43+ - AsyncStorage = require('react-native/Libraries/react-native/react-native-implementation').AsyncStorage; -} catch (error) { - AsyncStorage = require('react-native/Libraries/react-native/react-native.js').AsyncStorage; -} +import CoreManager from './CoreManager'; var StorageController = { async: 1, + getAsyncStorage(): any { + return CoreManager.getAsyncStorage(); + }, + getItemAsync(path: string): ParsePromise { var p = new ParsePromise(); - AsyncStorage.getItem(path, function(err, value) { + this.getAsyncStorage().getItem(path, function(err, value) { if (err) { p.reject(err); } else { @@ -37,7 +33,7 @@ var StorageController = { setItemAsync(path: string, value: string): ParsePromise { var p = new ParsePromise(); - AsyncStorage.setItem(path, value, function(err) { + this.getAsyncStorage().setItem(path, value, function(err) { if (err) { p.reject(err); } else { @@ -49,7 +45,7 @@ var StorageController = { removeItemAsync(path: string): ParsePromise { var p = new ParsePromise(); - AsyncStorage.removeItem(path, function(err) { + this.getAsyncStorage().removeItem(path, function(err) { if (err) { p.reject(err); } else { @@ -60,7 +56,7 @@ var StorageController = { }, clear() { - AsyncStorage.clear(); + this.getAsyncStorage().clear(); } }; diff --git a/src/__tests__/Storage-test.js b/src/__tests__/Storage-test.js index d0eecbb5b..626a679bf 100644 --- a/src/__tests__/Storage-test.js +++ b/src/__tests__/Storage-test.js @@ -29,15 +29,6 @@ var mockRNStorageInterface = { }, }; -// for React Native 0.43+ -jest.mock('react-native/Libraries/react-native/react-native-implementation', () => { - return {AsyncStorage: mockRNStorageInterface}; -}, {virtual: true}); - -jest.mock('react-native/Libraries/react-native/react-native.js', () => { - return {AsyncStorage: mockRNStorageInterface}; -}, {virtual: true}); - var CoreManager = require('../CoreManager'); var ParsePromise = require('../ParsePromise').default; @@ -106,6 +97,7 @@ var RNStorageController = require('../StorageController.react-native'); describe('React Native StorageController', () => { beforeEach(() => { + CoreManager.setAsyncStorage(mockRNStorageInterface); RNStorageController.clear(); });