@nodejs_ru

Страница 498 из 2748
Vladimir
12.01.2017
14:48:06
вот url parser синхронизировали между нодой и браузером уже хорошо

Ҫѐҏӗѫӑ
12.01.2017
14:48:52
а уже выпустили?

это ж брейкинг ченж

Google
Ҫѐҏӗѫӑ
12.01.2017
14:49:13
в 8 будет видимо

Никита
12.01.2017
16:07:08
это ж брейкинг ченж
Отдельным свойством.

Не бреакинг.

semver-minor

https://github.com/nodejs/node/pull/7448

require('url').URL теперь даёт такой же интерфейс, как URL в браузере

А раньше его не было

И да, это в 7.0.0 вошло.

Ҫѐҏӗѫӑ
12.01.2017
16:15:08
а, да

забыл что это св-во

Pavel
12.01.2017
16:42:48
#вопрос Господа, подскажите как быть с такой неприятностью? // foo.js import Lib from 'Lib/browser' function foo () { //кодище } export default foo // foo.test.js import foo from './foo' describe( 'foo', () => { // тесты валятся с ошибкой «ReferenceError: window is not defined» } )

Надо как-то подменять библиотеку версией для NodeJS на время тестирования

Google
Vladimir
12.01.2017
16:54:31
Если да, то переписать

Pavel
12.01.2017
16:56:23
Мой

Как именно?

Проверять окружение?

Vladimir
12.01.2017
16:57:03
Прокидывать window аргументом

Aleh
12.01.2017
16:57:23
ну а лучше то, что от window надо

Pavel
12.01.2017
16:57:27
эээ куда? В библиотеку?

Aleh
12.01.2017
16:57:42
а если она от dom зависит, то наверное jsdom

Vladimir
12.01.2017
16:58:48
эээ куда? В библиотеку?
Да, что у тебя из windows используется?

Pavel
12.01.2017
17:00:12
Да, что у тебя из windows используется?
У меня в коде ничего. У меня подключена библиотека Lib и у неё есть вариант сборки для браузера и вариант для ноды. Тестируемый модуль написан для работы в браузере и подключает браузерную версию, которая падает при попытке тестировать код нодой.

Что логично

Мне надо на время теста подменять зависимость моего модуля

Pavel
12.01.2017
17:02:16
А как?

Vladimir
12.01.2017
17:03:04
Я не знаю

Ты же говоришь что есть две версии

Pavel
12.01.2017
17:03:18
Ну да

Мне надо при тесте подменять их

Каким-то образом

Vladimir
12.01.2017
17:03:44
Require('lib/dist/node-version.js')

Google
Vladimir
12.01.2017
17:04:12
А для тестов в браузере реквайрить браузерную версию

Klim
12.01.2017
17:04:19
Vladimir
12.01.2017
17:04:38
Если совсем ничего не получится, то попробуй это https://github.com/jhnns/rewire/blob/master/README.md

Klim
12.01.2017
17:05:12
На одной экспресс точёный На другой коа дроченый

Vladimir
12.01.2017
17:06:48
В браузере может быть?

Pavel
12.01.2017
17:07:05
эмм, плохо себе представляю это

Vladimir
12.01.2017
17:07:49
Посмотри testem

Для начала

Pavel
12.01.2017
17:11:34
Посмотришь?
хм, прикольная штука

спасибо большое

Evgeny
12.01.2017
17:12:07
phantomjs, selenium

Vladimir
12.01.2017
17:23:53
Лол
Мм?

Pavel
12.01.2017
17:25:39
как-то оно сложно вяжется с Mocha + Chai + Babel

уф

Vladimir
12.01.2017
17:26:20
Babel не причем

Google
Vladimir
12.01.2017
17:26:26
Chai тоже

Проблема обычно только в тест-раннерах

Darth
12.01.2017
17:27:27
Мм?
Просто прозвучало будто про f5 :)

Andrey
12.01.2017
17:27:32
Jsdom + мок зависимость не решит проблему?

Nikolay
12.01.2017
17:27:41
ктонибудь дружил webpack с mocha, у меня в вебпаке много алиасов, хочу unit тесты написать

Pavel
12.01.2017
17:28:05
это оверкилл какой-то

Vladimir
12.01.2017
17:29:31
ктонибудь дружил webpack с mocha, у меня в вебпаке много алиасов, хочу unit тесты написать
Самое простое - откажись от алиасов и пиши обычные юнит тесты

Зачем тут вебпак?

Admin
ERROR: S client not available

Vladimir
12.01.2017
17:30:43
это оверкилл какой-то
С ним быстрее ?

Да мне не нужен jsdom
А вообще тебе нужно google how to run tests in the browser

Evgeny
12.01.2017
17:31:23
Andrey
12.01.2017
17:34:06
Если jsdom оверкил, тогда не знаю как назвать phantomjs)

Pavel
12.01.2017
17:35:23
А вообще тебе нужно google how to run tests in the browser
Ну пока ты не сказал, мне даже в голову не приходил этот подход

До сих пор все отлично внутри вебшторма тестил просто

Andrey
12.01.2017
17:36:19
Внутри вебшторма?

Pavel
12.01.2017
17:36:38
Ну через npm test

Evgeny
12.01.2017
17:36:42
я, пожалуй, удалю свой недописанный коммент про ci/cd..

Vladimir
12.01.2017
17:37:32
Google
Vladimir
12.01.2017
17:37:47
Какой смысл их тестить в ноде не пойму

Gordey
12.01.2017
17:38:37
тут надо понимать, что есть оверкилл по потраченному времени, есть по скорости прохождения/сборки, и тд

главное правильно приоритезировать оверкиллы

Pavel
12.01.2017
17:39:49
С юнит тестами все норм
Кстати щас понял что там не обязательно браузерную версию либы брать в зависимости. Да и вообще она не очень там нужна

Pavel
12.01.2017
17:41:22
Так-то это юнит-тест, там просто генерация id используется из библиотеки просто потому что она уже есть в проекте

Bogdan
12.01.2017
18:17:13
Поясните за преимущества коа перед эксперссом?
В экспрессе нельзя сделать конвейерную обработку запросов потому что express отбрасывает значения middleware-функции и вот такое без патча экспресса сделать не получится //log requests middlewares.push(async(next, req, res) => { console.log('request start:', req.method, req.url); var response = await next(); console.log('request send:', response); res.end(JSON.stringify(response)); console.log('request end:', req.method, req.url); }); //catch errors middlewares.push(async(req, res, next) => { try { return await next(); } catch (e) { console.log('error:', e); res.status(400); return {error: e.message}; } }); middlerawe.push(staticServer) //connect to database middlewares.push(async(next, req, res) => { req.db = await new DB(schema); req.data = {}; try { return await next(); } catch (err) { await req.db.disconnect(); throw err; } }); middlerawe.push(cookieParser) middlewares.push(getCurrentUserOrCreateGuest) middlerawe.push(bodyParser) //map request info to crud operation middlewares.push(async(next, req, res) => { var [table, id] = req.url.split('/').slice(1); var dbActions = { "GET": 'get', "POST": 'add', "PUT": 'update', "DELETE": 'delete' }; req.data.action = dbActions[req.method]; req.data.table = table; req.data.id = id; return await next(); }); //process request in database middlewares.push(async(next, req, res) => { var {table, id, action} = req.data; if(!table) throw new Error('no table'); var index = req.query.index; var body = req.body; if (action == 'get') { return await req.db.get(table, id, {index}) } if (action == 'add') { return await req.db.add(table, body) } if (action == 'update') { return await req.db.update(table, id, body) } if (action == 'delete') { return await req.db.delete(table, id) } });

Ramzes
12.01.2017
18:43:49
В экспрессе нельзя сделать конвейерную обработку запросов потому что express отбрасывает значения middleware-функции и вот такое без патча экспресса сделать не получится //log requests middlewares.push(async(next, req, res) => { console.log('request start:', req.method, req.url); var response = await next(); console.log('request send:', response); res.end(JSON.stringify(response)); console.log('request end:', req.method, req.url); }); //catch errors middlewares.push(async(req, res, next) => { try { return await next(); } catch (e) { console.log('error:', e); res.status(400); return {error: e.message}; } }); middlerawe.push(staticServer) //connect to database middlewares.push(async(next, req, res) => { req.db = await new DB(schema); req.data = {}; try { return await next(); } catch (err) { await req.db.disconnect(); throw err; } }); middlerawe.push(cookieParser) middlewares.push(getCurrentUserOrCreateGuest) middlerawe.push(bodyParser) //map request info to crud operation middlewares.push(async(next, req, res) => { var [table, id] = req.url.split('/').slice(1); var dbActions = { "GET": 'get', "POST": 'add', "PUT": 'update', "DELETE": 'delete' }; req.data.action = dbActions[req.method]; req.data.table = table; req.data.id = id; return await next(); }); //process request in database middlewares.push(async(next, req, res) => { var {table, id, action} = req.data; if(!table) throw new Error('no table'); var index = req.query.index; var body = req.body; if (action == 'get') { return await req.db.get(table, id, {index}) } if (action == 'add') { return await req.db.add(table, body) } if (action == 'update') { return await req.db.update(table, id, body) } if (action == 'delete') { return await req.db.delete(table, id) } });
Я если честно не понял тебя, но спасибо, буду иметь в виду

Bogdan
12.01.2017
18:48:44
Я если честно не понял тебя, но спасибо, буду иметь в виду
когда в экспрессе добавляем миддлварку мы не можем получить значение следующей миддлварки после того как она выполнится. И соотвественно не сможем подписаться на промис который вернет миддлварка потому что express его отбросил app.use(function(req,res,next){ console.log('start'); var result = next(); //всегда будет undefined даже если миддлварка вернет какое-то значение; result.then(()=>{ console.log('end'); }) }) app.use(function(req,res,next){ return new Promise(res=>{ setTimeout(res, 1000); }) })

hamper ?
12.01.2017
18:56:28
В мидлварках можно в req пихать что угодно

hamper ?
12.01.2017
18:57:58
Можно хоть промисы, хоть значения через нее пропихивать, как через контекст.

Ramzes
12.01.2017
18:58:41
Прикольно. А на сколько это сейчас стабильно?

hamper ?
12.01.2017
19:00:05
req.prom = new Promise(res=>{ setTimeout(res, 1000); }) в следующей после next() просто делаешь req.prom.then(...)

Evgeny
12.01.2017
19:00:27
Да, да, экспресс - это очень удобно

hamper ?
12.01.2017
19:00:46
req это по сути контекст запроса.

Bogdan
12.01.2017
19:01:55
req.prom = new Promise(res=>{ setTimeout(res, 1000); }) в следующей после next() просто делаешь req.prom.then(...)
ок, с чистыми промисами это сделать можно, а как ты теперь заюзаешь async-await ? middlewares.push(async(next, req, res) => { console.log('request start:', req.method, req.url); var response = await next(); console.log('request send:', response); res.end(JSON.stringify(response)); console.log('request end:', req.method, req.url); }); //catch errors middlewares.push(async(req, res, next) => { try { return await next(); } catch (e) { console.log('error:', e); res.status(400); return {error: e.message}; } });

hamper ?
12.01.2017
19:06:20
А экспресс с асинками уже работает? Я просто год его уже не видел.

Bogdan
12.01.2017
19:08:35
не работает, как раз по причине того что отбрасывает значение миддлварки и await next() выдаст ошибку потому что next() вернул undefined а не промис

но если нужно то можно заюзать мой патч - https://github.com/expressjs/express/pull/3138 там всего лишь нужно в нескольких строках добавить слово return

Страница 498 из 2748