Keine Beschreibung

test-fetch.js 6.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. import RNTest from './react-native-testkit/'
  2. import React from 'react'
  3. import RNFetchBlob from 'react-native-fetch-blob'
  4. import {
  5. StyleSheet,
  6. Text,
  7. View,
  8. ScrollView,
  9. Platform,
  10. Dimensions,
  11. Image,
  12. } from 'react-native';
  13. window.Blob = RNFetchBlob.polyfill.Blob
  14. window.File = RNFetchBlob.polyfill.File
  15. window.fetch = new RNFetchBlob.polyfill.Fetch({
  16. auto : true,
  17. binaryContentTypes : ['image/', 'video/', 'audio/']
  18. }).build()
  19. const fs = RNFetchBlob.fs
  20. const { Assert, Comparer, Info, prop } = RNTest
  21. const describe = RNTest.config({
  22. group : 'Fetch polyfill',
  23. run : true,
  24. expand : true,
  25. timeout : 10000,
  26. })
  27. const { TEST_SERVER_URL, TEST_SERVER_URL_SSL, FILENAME, DROPBOX_TOKEN, styles } = prop()
  28. const dirs = RNFetchBlob.fs.dirs
  29. let prefix = ((Platform.OS === 'android') ? 'file://' : '')
  30. // describe('GET request test : unicode text -> any', (report, done) => {
  31. //
  32. // function get(fn1, fn2) {
  33. // return fetch(`${TEST_SERVER_URL}/unicode`, { method : 'GET'})
  34. // .then((res) => fn1(res))
  35. // .then((data) => fn2(data))
  36. // }
  37. //
  38. // let promises =
  39. // [
  40. // get((res) => res.json(), (json) => {
  41. // report(<Assert key="json data correct" expect={'你好!'} actual={json.data}/>)
  42. // }),
  43. // get((res) => res.text(), (text) => {
  44. // report(<Assert key="text data correct" expect={'你好!'} actual={JSON.parse(text).data}/>)
  45. // }),
  46. // get((res) => res.blob(), (blob) => {
  47. // return blob.readBlob('utf8').then((text) => {
  48. // report(<Assert key="blob data correct" expect={'你好!'} actual={JSON.parse(text).data}/>)
  49. // })
  50. // }),
  51. // // get((res) => res.arrayBuffer(), (text) => {
  52. // // report(<Assert key="text data correct" expect={'你好!'} actual={JSON.parse(text).data}/>)
  53. // // })
  54. // ]
  55. //
  56. // Promise.all(promises).then(() => {
  57. // done()
  58. // })
  59. //
  60. // })
  61. //
  62. // describe('GET request test : path -> any', (report, done) => {
  63. //
  64. // function get(fn1, fn2, fn3) {
  65. // fetch(`${TEST_SERVER_URL}/public/github.png`, { method : 'GET'})
  66. // .then((res) => fn1(res))
  67. // .then((data) => fn2(data))
  68. // .catch((err) => fn3(err))
  69. // }
  70. // let contentLength = 0
  71. // let isIOS = Platform.OS === 'ios'
  72. // let promises = [
  73. // // FIXME: IOS only
  74. // // https://github.com/facebook/react-native/issues/9178
  75. // get((res) => {
  76. // if(isIOS)
  77. // return res.json()
  78. // return Promise.resolve()
  79. // }, (data) => {
  80. // report(<Assert key="should not convert blob to JSON (IOS only)" expect={true} actual={false} />)
  81. // }, (err) => {
  82. // report(<Assert key="should not convert blob to JSON (IOS only)" expect={true} actual={true} />)
  83. // }),
  84. // // FIXME: IOS only
  85. // // https://github.com/facebook/react-native/issues/9178
  86. // get((res) => {
  87. // contentLength = res.headers['Content-Length']
  88. // if(isIOS)
  89. // return res.text()
  90. // return Promise.resolve()
  91. //
  92. // }, (data) => {
  93. // try {
  94. // report(<Assert key="content length should correct (IOS only)" expect={Math.floor(contentLength)} actual={data ? data.length : 0} />)
  95. // } catch(e){}
  96. // }, (err) => {
  97. // console.warn(err, err.stack)
  98. // }),
  99. // get((res) => {
  100. // console.log('##',res.headers['Content-Length'], res)
  101. // contentLength = res.headers['Content-Length']
  102. // return res.blob()
  103. // }, (blob) => {
  104. // return fs.stat(blob._ref).then((stat) => {
  105. // report(<Assert key="stored file size correct" expect={contentLength} actual={stat.size} />)
  106. // return blob.readBlob('base64')
  107. // })
  108. // .then((b64) => {
  109. // report(<Info key="stored image">
  110. // <Image style={styles.image} source={{uri : 'data:image/png;BASE64 ,' + b64}}/>
  111. // </Info>)
  112. // })
  113. //
  114. // }, (err) => {
  115. // console.warn(err, err.stack)
  116. // })
  117. // ]
  118. // Promise.all(promises).then( () => done() )
  119. //
  120. // })
  121. //
  122. // describe('POST different kinds of body', (report, done) => {
  123. //
  124. // let image = RNTest.prop('image')
  125. // let tmpPath = dirs.DocumentDir + '/tmp-' + Date.now()
  126. //
  127. // function upload(desc, pBody) {
  128. // let name = `fetch-replacement-${Platform.OS}-${Date.now()}-${Math.random()}.png`
  129. // return pBody.then((body) =>
  130. // fetch('https://content.dropboxapi.com/2/files/upload', {
  131. // method : 'post',
  132. // headers : {
  133. // Authorization : `Bearer ${DROPBOX_TOKEN}`,
  134. // 'Dropbox-API-Arg': '{\"path\": \"/rn-upload/'+name+'\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}',
  135. // 'Content-Type' : 'application/octet-stream'
  136. // },
  137. // body})
  138. // )
  139. // .then((res) => {
  140. // return res.json()
  141. // })
  142. // .then((info) => {
  143. // report(<Assert key={desc} expect={name} actual={info.name}/>)
  144. // })
  145. // }
  146. //
  147. // fetch(`${TEST_SERVER_URL}/public/github2.jpg`)
  148. // .then((res) => res.blob())
  149. // .then((b) => b.readBlob('base64'))
  150. // .then((image) => {
  151. // let tests = [
  152. // upload('upload base64 encoded body', Promise.resolve(image)),
  153. // upload('upload Blob body', Blob.build(image, 'image/png;BASE64')),
  154. // upload('upload file path body', fs.writeFile(tmpPath, image, 'base64').then(() => {
  155. // Promise.resolve(RNFetchBlob.wrap(tmpPath))
  156. // }))
  157. // ]
  158. // Promise.all(tests).then(() => done())
  159. // })
  160. //
  161. // })
  162. //
  163. // describe('Request header correctness', (report, done) => {
  164. //
  165. // let expect = {
  166. // 'hello' : 'world',
  167. // 'Content-Type' : 'application/json',
  168. // 'foo' : encodeURIComponent('福' + Date.now())
  169. // }
  170. //
  171. // fetch(`${TEST_SERVER_URL}/xhr-header`, {
  172. // method : 'GET',
  173. // headers : expect
  174. // })
  175. // .then((res) => res.json())
  176. // .then((actual) => {
  177. // report(<Info key={JSON.stringify(actual)}/>)
  178. // report(<Assert key="header field test #1" expect={expect.hello} actual={actual.hello}/>)
  179. // report(<Assert key="header field test #2" expect={expect['content-type']} actual={actual['content-type']}/>)
  180. // report(<Assert key="header field test #3" expect={expect.foo} actual={actual.foo}/>)
  181. // done()
  182. // })
  183. //
  184. // })
  185. describe('Upload form data ', (report, done) => {
  186. let form = new FormData()
  187. let expectName = 'fetch-replacement-test' + new Date()
  188. File
  189. .build('test-image.png', RNTest.prop('image'), { type : 'image/png;BASE64' })
  190. .then((file) => {
  191. form.append('name', expectName)
  192. form.append('file', file)
  193. return fetch(`${TEST_SERVER_URL}/upload-form`, {
  194. method : 'POST',
  195. body : form
  196. })
  197. })
  198. .then((res) => res.json())
  199. .then((json) => {
  200. report(
  201. <Assert key="form data verify" expect={expectName} actual={json.fields.name}/>,
  202. <Assert key="file size verify" expect={23975} actual={json.files[0].size}/>,
  203. <Assert key="form data file name verify" expect={'test-image.png'} actual={json.files[0].originalname}/>
  204. )
  205. done()
  206. })
  207. })