
Andrey
27.08.2018
06:10:01

Eugene
27.08.2018
06:12:32


Gena
27.08.2018
06:13:54
Народ как тестируете в rn, что используете? Есть задача покрыть код unit и итеграционными тестами под обе платформы
При такой постановке эта задача может быть очень сложной. Как-то (проект был серверный и не на JS, но код - всегда код) у меня на внедрение тестов в большой проект ушло больше 2 лет, естественно всё это делалось без отрыва от основной разработки, а пользу это начало приносить только через пол года...
Мы сейчас тестируем. У нас есть следующие виды тестов:
1. Юнит-тесты слоя логики и модели, их больше всего... ничего специального для RN... собственно в этом слое реакта и натива нет... прослойка сети мокается, для тестов самой прослойки - https://github.com/vovkasm/mock-websocket
2. Функциональные тесты высокоуровневой логики... там есть RN, но нет компонентов... таких тестов сейчас 2 или 3 проверяется корректность начальной загрузки приложения... они длинные и непонятные, куча моков
3. Есть несколько снапшот-тестов компонентов
Всё... как делать нормальное UI-тестирование я так и не знаю.
Используем jest, потому что это единственное, что нормально мокает RN.


Who is?
27.08.2018
06:18:54
Спасибо большое! Особенно за mock-websocket и appium, я думаю это что мне пригодится, буду туда смотреть. В приложении есть сложные анимированные компоненты, работающие от фазы луны, есть у кого опыт такого извращения?

Google

Nikita
27.08.2018
06:20:19
Товарищи, подскажите, для чего нужна блютус нотификация?

Никита
27.08.2018
06:24:01

Nikita
27.08.2018
07:04:17
Йеп, я слепой, не увидел мелькую подпись полупрозрачного цвета в доках

Play
27.08.2018
08:58:03
Скрин сверху
это:
https://youtu.be/Iw8tKp0ALkA
и после это:
https://youtu.be/IHThgXE5U1c

あなたの神
27.08.2018
10:33:30
Пипл, можно как-то без костылей сделать два Drawer’a на одном скрине? React navigation

Play
27.08.2018
10:36:52

あなたの神
27.08.2018
10:36:58

Play
27.08.2018
10:37:35
Да
С кастомным хедером какие сложности могут быть?

あなたの神
27.08.2018
10:38:16

Play
27.08.2018
10:39:20

あなたの神
27.08.2018
10:40:59

Play
27.08.2018
10:41:47

あなたの神
27.08.2018
10:42:52

Google

Andrei
27.08.2018
11:01:52
это:
https://youtu.be/Iw8tKp0ALkA
и после это:
https://youtu.be/IHThgXE5U1c

Play
27.08.2018
11:19:58

Катерина
27.08.2018
11:52:55
Ребята, привет. Можете дать ссылку на какое-нибудь небольшое, но очень красивое приложение на реакт нейтиве на гитхабе? Может кто-нибудь из вас хочет похвастаться? Мне для примера


Vetka
27.08.2018
11:53:45
Всем привет! Такая проблема: при логине токены записываю в AsyncStorage, потом при разлогине их запрашиваю, чтобы отправить X-Auth-Token в headers, при первом запросе получаю ошибку, что не авторизована, хотя в заголовок токен подставляется, при втором запросе все проходит ок. Как это исправить?
Так записываю в сторэдж
export const setItem = (key, value) => async () => {
try {
await AsyncStorage.setItem(key, JSON.stringify(value))
} catch(error) {
console.log(error.message)
}
}
Так получаю из сторэджа
export const getItem = async () => {
try {
const item = await AsyncStorage.getItem('accessTokens')
return JSON.parse(item)
} catch(error) {
console.log(error.message)
}
}
И так формирую хедеры
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': auth,
}
const getToken = async () => {
return await getItem('accessTokens')
}
export const getHeaders = () => {
getToken().then(res => Object.assign(headers, {'X-Auth-Token': res.access_token}))
return headers
}


Ksetrin
27.08.2018
11:56:10

Ivan
27.08.2018
11:57:05
getHeaders не должен быть асинком?
return случится раньше, чем then

Vetka
27.08.2018
12:01:40
getHeaders не должен быть асинком?
export const logout = () => ({
type: actionTypes.LOGOUT,
payload: {
request: {
url: API.logoutUrl(),
method: 'get',
headers: API.getHeaders()
},
options: {
onSuccess({dispatch, response}) {
API.handleSuccess(response, dispatch, actionTypes.LOGOUT_SUCCESS, actionTypes.LOGOUT_FAIL)
},
onError({dispatch, error}) {
API.handleError(dispatch, actionTypes.LOGOUT_FAIL, error)
},
},
}
})
если сделать getHeaders асинком, то будет промис возвращаться. Или как именно нужно модифицировать?

Катерина
27.08.2018
12:02:12

Nick
27.08.2018
12:05:20

Ivan
27.08.2018
12:09:40
export const logout = () => ({
type: actionTypes.LOGOUT,
payload: {
request: {
url: API.logoutUrl(),
method: 'get',
headers: API.getHeaders()
},
options: {
onSuccess({dispatch, response}) {
API.handleSuccess(response, dispatch, actionTypes.LOGOUT_SUCCESS, actionTypes.LOGOUT_FAIL)
},
onError({dispatch, error}) {
API.handleError(dispatch, actionTypes.LOGOUT_FAIL, error)
},
},
}
})
если сделать getHeaders асинком, то будет промис возвращаться. Или как именно нужно модифицировать?
а через что запросы делаются? оно умеет получать промис в headers: API.getHeaders() ? в axios там только объект

Vetka
27.08.2018
12:10:24
redux-logger выдает, что в заголовке токен уходит

Ivan
27.08.2018
12:11:55
может он ссылается на измененный объект?
лучше сначала обновить хедеры, а потом уже запрос слать с измененными

Denis
27.08.2018
12:15:36
посоветуйте пожалуйста маску для textinput (RN)

Google

Vetka
27.08.2018
12:17:29

Ivan
27.08.2018
12:24:26
это уж зависит от логики жизни хедеров
можно токены хранить в сторе, чтоб при изменениях что-то делать, но тут опять может что-то с асинхронностью вылезти

Dmitry
27.08.2018
12:29:11
Кто еще помнить про проблему рендера картинок внутри FlatList. Проблема решена перенос картинок в assets и загрузкой их через линки
<Image source={{ uri: 'iconnName' }} />

morda
27.08.2018
12:42:39

Катерина
27.08.2018
12:43:11

morda
27.08.2018
12:44:50
вот это посмотри https://github.com/fangwei716/30-days-of-react-native
это не пример приложения а пример того че делать можно вообще
такой беглый)

John
27.08.2018
12:53:47
Подскажите как выключить в RN поддержку split view/screen?

✡️Хаски
27.08.2018
12:56:51
Как называеться компонент что с текстом "вы офлайн"

✡️Хаски
27.08.2018
12:57:23
?

Vladimir
27.08.2018
12:58:29
не уверен, что есть такой компонент. Напишите сами) NetInfo в помощь

Sergey
27.08.2018
12:59:05

Dmitry
27.08.2018
12:59:29
https://wix.github.io/react-native-ui-lib/docs/ConnectionStatusBar/

Nick
27.08.2018
12:59:54

John
27.08.2018
13:18:39

Stas
27.08.2018
13:57:44
Привет, можно ли заставить кнопку download в <audio/> работать?

Google

Play
27.08.2018
14:08:48

Stas
27.08.2018
14:13:46

Stepan
27.08.2018
14:15:02
а у тебя webview, в нем аудио, и не скачивается?

Stas
27.08.2018
14:17:38
ага

Artem
27.08.2018
14:41:57
Привет! Ребят, может кто подскажет - у нас приложение android с react native navigation. Прикрутили One Signal для работы с пушами, но когда приложение открыто или в бекграунде клик на пуш все равно перезапускает приложение. Вот я не пойму это мы one signal недонастроили или rnn или это вообще баг какой.

Admin
ERROR: S client not available

Dmitry
27.08.2018
14:54:28

Artem
27.08.2018
14:57:38
А у тебя второй RNN или первый? И какая либа для обработки пушей?

Dmitry
27.08.2018
14:58:19
Либа - react-native-push-notification-ce

Efim
27.08.2018
15:04:32
А что если нужно просто открывать вебвью с определенным сайтом и слать пуши, RN лучшее решение для этого?

Gena
27.08.2018
15:24:32


Dmitry
27.08.2018
15:52:04
Круто! А напомните, изначально картинки внешние были (по сети загружались) или через require включались локальные? И если это второй вариант, то не докопались ли до сути, т.е. почему именно проблема была?
Картинки лежали локальному в корне проекта, подключались через require. Сильно не копался, но пробовал разные варианты загрузки ресурсов. Так как в require нельзя передавать переменные, то был объект { 1: require("./1.png"), ... } по котором пробегался FlatList и создавал итемы <Image source={icons[key]} />. Причём баг скролла только при первом открытии. Дальше, была попытка предзагрузить ресурсы картинок на старте приложения, что в целом ускоряло оживление скролла, но замедляло старт приложения на 2 секунды, блокировался причём на сплэшскрине. Дальше были попытки использовать не FlatList, но я так и не получил нужного результата. По всей видимости require блокирует тред. Именно поэтому лочится скролл. И вообще вся эта кривота


Gena
27.08.2018
15:54:10
Картинки лежали локальному в корне проекта, подключались через require. Сильно не копался, но пробовал разные варианты загрузки ресурсов. Так как в require нельзя передавать переменные, то был объект { 1: require("./1.png"), ... } по котором пробегался FlatList и создавал итемы <Image source={icons[key]} />. Причём баг скролла только при первом открытии. Дальше, была попытка предзагрузить ресурсы картинок на старте приложения, что в целом ускоряло оживление скролла, но замедляло старт приложения на 2 секунды, блокировался причём на сплэшскрине. Дальше были попытки использовать не FlatList, но я так и не получил нужного результата. По всей видимости require блокирует тред. Именно поэтому лочится скролл. И вообще вся эта кривота
Хм... спасибо за подробное описание, я это запомню:-)

Dmitry
27.08.2018
15:55:44

Artem
27.08.2018
17:26:23
Просто в доке one signal singleTop стоит, но мне нужного поведения удалось добиться с singleTask

Vitaly
27.08.2018
17:34:20
Ребята, привет! Подскажите, плиз, как получить текущую валюту пользователя? Я могу получить список товаров для пользователя и оттуда дернуть, но может есть какой-то конкретный метод.

Dmitry
27.08.2018
17:37:19
Кто чем пользуется для дебага ? Пробовал отдельный дебаггер, как приложение, но он жутко тормозной и вешается после длительной работы

Google

Dmitry
27.08.2018
18:26:37
дебаггер в хроме тоже оставляет желать лучшего

Artem
27.08.2018
18:31:10

Dmitry
27.08.2018
18:32:03

Artem
27.08.2018
18:41:02

Dmitry
27.08.2018
18:42:26

Artem
27.08.2018
18:44:23
Странно, у меня стабильно меньше гига ест даже после нескольких часов работы без перезапуска

Dmitry
27.08.2018
18:44:50

Alexander
27.08.2018
18:58:43
И еще есть такой костыль для RNN https://github.com/wix/react-native-notifications/wiki/Android:-working-with-RNN

Artem
27.08.2018
19:06:41

Alexander
27.08.2018
19:17:50

Artem
27.08.2018
19:23:50
https://github.com/wix/react-native-navigation/tree/v2#react-native-navigation-v2-wip внизу табличка

Andrei
27.08.2018
21:04:06
Всем спасибо за помощь вчера
Теперь другой вопрос: при входе в свой аккаунт, пользователь вводит свой никнейм, потом отправляется запрос на сервер с проверкой, сервер проверяет это всё с базой данных и отправляет запрос назад. Теперь вопрос вот в чём: если имя пользователя правильное, то оно должно сохраняться в стор редукса. Если что, стор находится в другом файле. Проблема ещё заключается в том, что я не знаю, что надо использовать: store.dispatch или mapdispatchtoprops и как правильно соединить с коннектом?
если что, то вот это всё с проверкой уже тоже реализовано