@rubylang

Страница 501 из 1684
Иван
16.10.2016
22:22:27
и еще стоит валидация на то что user_id presence: true?

не очень понятно просто что ты хочешь протестить

Eugene
16.10.2016
22:26:03
и еще стоит валидация на то что user_id presence: true?
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable validates :user_name, presence: true, length: { minimum:4, maximum: 16 } validates :number_of_group, presence: true, length: { minimum:6, maximum: 6} validates :user_id, presence: true has_many :colors end

не очень понятно просто что ты хочешь протестить
Хочу протестить названия цветов, но для того, чтобы не повторятся использую валидатор

Google
Иван
16.10.2016
22:27:21
а в моделе coolor что у тебя?

и в юзер моделе вот это validates :user_id, presence: true думаю не надо

в общем все равно до конца не понял что надо, но попробуй так в тесте - user = User.new().save(validate: false) expect(Color.new(color_work: "adaa", user: user)).to be_valid

но валидации всякие разные советую тестировать с помощью shoulda-matchers. https://github.com/thoughtbot/shoulda-matchers

Антон
16.10.2016
22:35:15
ты что, выебон?
это очень важно в субботу рейлсклаб можно просрать

Eugene
16.10.2016
22:35:41
спасибо

Danila
16.10.2016
22:43:19
Alex
16.10.2016
22:46:29
спасибо
Метод save() может быть только у созданного инстанса модели, и думаю там должны быть хотя бы какие то данные чтобы сейв работал. Посмотри еще factorygirl для сложных валидаций.

остальное через шоулду

я давно в тесте модельки вручную не делаю.

Alex
16.10.2016
22:47:23
да, как то так.

Google
Eugene
16.10.2016
22:47:28
но не пашет)

Alex
16.10.2016
22:47:30
Но factorygirl лучше )

но не пашет)
Так ошибку то ты не написал.

Eugene
16.10.2016
22:47:35
я знаю

Failure/Error: expect(Color.new(color_work: "adaa")).to be_valid expected #<Color id: nil, created_at: nil, updated_at: nil, color_travel: nil, color_work: "adaa", color_labs: nil, color_lectures: nil, color_seminars: nil, color_nonactive_lessons: nil> to be valid, but got errors: User must exist, Color work Color is not validate

Alex
16.10.2016
22:48:25
> but got errors: User must exist Это твоя кастомная валидация скорее всего.

У инстанса модельки даже если он не существует можно проверить валидность если нет сложных валидаций которые лезут в базу.

Eugene
16.10.2016
22:50:33
> but got errors: User must exist Это твоя кастомная валидация скорее всего.
Она и вылетает когда я кастомную даже не подключаю а length: { minimum:4, maximum: 16 } то выдаёт просто User must exist без Color work Color is not validate

Alex
16.10.2016
22:51:04
> User must exist Не должен вылетать при проверке валидности. По крайней мере в рельсах 4.*

Иван
16.10.2016
22:51:31
это скорее всего из за belongs_to + rails5

какая модель у тебя belongs_to :user ?

Eugene
16.10.2016
22:52:20
yep

Alex
16.10.2016
22:52:20
Потому и factorygirl

заюзай его, он крут

Иван
16.10.2016
22:57:14
если у тебя модель color belongs_to :user, то либо ты в параметрах указывай юзера, либо в моделе пропиши что belongs_to :user, optional: true

Alex
16.10.2016
22:57:36
либо заюзать factorygirl который будет всегда это сам проставлять.

Иван
16.10.2016
22:57:41
тогда если в моделе колорс user_id будет nil ругаться не будет

Alex
16.10.2016
22:57:47
(и не засорять непосредственно код теста)

Eugene
16.10.2016
22:58:24
а как задать пароль юзеру

Alex
16.10.2016
22:58:37
password: ""

Google
Иван
16.10.2016
22:58:38
да даж не либо заюзать, а надо юзать

тебе не обязателен пароль юзера для теста, ты же умеешь сохранять юзера без валидаций

главное чтоб user_id попал туда куда нужно

Alex
16.10.2016
23:00:26
если пароль валидируется то его можно проставить.

Опять же, все эти вещи хорошо делать через самизнаетечто

Eugene
16.10.2016
23:00:52
главное чтоб user_id попал туда куда нужно
а как их связать чтобы user_id нормально попал куда нужно?

Alex
16.10.2016
23:01:24
уже устанавилваю
getting started прочти там. Сразу все станет понятно.

Иван
16.10.2016
23:01:29
в общем все равно до конца не понял что надо, но попробуй так в тесте - user = User.new().save(validate: false) expect(Color.new(color_work: "adaa", user: user)).to be_valid

Alex
16.10.2016
23:01:55
не надо юзера со скипом валидаций сохранять

Только проблем огрести

Иван
16.10.2016
23:02:36
в тестовой базе?

Alex
16.10.2016
23:02:40
да

потому что тест может себя вести уже не так как надо

Иван
16.10.2016
23:02:50
а чего случиться то может?

Alex
16.10.2016
23:03:01
зачем огребать если можно на самом деле создать запись в базе?

а чего случиться то может?
Например тест большой и дальше ты будешь проверять валидность этой записи

Или попробуешь поменять параметр и сохранить снова.

Иван
16.10.2016
23:04:00
ну тест пройдет, ты увидишь фейл и подумаешь нахрена я это делаю если можно через факторигерл все красиво запилить

Alex
16.10.2016
23:04:17
зачем огребать если можно быстро и легко написать нормально

Google
Alex
16.10.2016
23:04:27
чем ловить баги которые сам же и разложил.

Eugene
16.10.2016
23:06:36
ладно пойду спать, чтобы завтра сражаться с этими тестами

всем еще раз спасибо

Alex
16.10.2016
23:07:36
Там все ОЧЕНЬ просто на самом деле.

Потом можно огрести с жирной factorygil моделью, поэтому все подкейсы лучше сразу бить на подтипы

например create(:user) create(:user_with_avatar)

А то у меня получилась одна жирная factorygirl модель которую сложно было поддерживать.

а основная модель постоянно меняется.

Иван
16.10.2016
23:08:44
в любом случае для валидаций есть shoulda-matchers для создания объектов есть factorygirl и что бы нормально писать тесты надо их использовать. А это скорее просто попробовать и посмотреть как всё работает, чем какие то реальный тесты для реального приложения

Alex
16.10.2016
23:08:58
соответственно factorygirl надо подводить под основную модель. А это ломает кучу тестов.

Admin
ERROR: S client not available

Alex
16.10.2016
23:09:28
> для валидаций есть shoulda-matchers Которые обрабатывают 90% случаев и очень круты. Но некоторые валидации придется все равно вручную тестировать

На всякий случай оформлю кратко: бейте factorygirl модели на подтипы create(:user) create(:user_with_avatar) Потом их поддерживать проще будет.

Alex
16.10.2016
23:14:17
https://gist.github.com/Fedcomp/dc5fd49e19946b69b4d5f3ec8ca388ef

Eugene
16.10.2016
23:14:19
Просто вставляю пример и не показывает выпадающее меню

Alex
16.10.2016
23:14:58
Google
Alex
16.10.2016
23:15:42
Кстати на модельку выше также оказало много вещей: во первых не было рефакторинга от слова вообще, во вторых постоянно менялись спецификации, да и опыта не было, чего уж там.

Eugene
16.10.2016
23:15:52
js то подключил от бутстрапа?
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true = javascript_include_tag 'application', 'data-turbolinks-track' => true = csrf_meta_tags

Alex
16.10.2016
23:15:58
Но это пример в какого монстра может превратиться эта хрень. Потом ее редактируешь и у тебя пол тест suite падает.

Eugene
16.10.2016
23:16:00
это можно назвать что подключено?

Alex
16.10.2016
23:16:11
Не знаю, бутстрап то там есть?

его js т.е

посмотри в сорсах страницы есть ли там бутстраповый js

также посмотри в консоли может есть какие js ошибки.

Eugene
16.10.2016
23:25:10
также посмотри в консоли может есть какие js ошибки.
подключил => получилось, некрасиво моргает когда дохожу до extra small devises и открываю это drop down меню, ну да ладно

Alex
16.10.2016
23:25:30
У меня дропдаун не моргал. Можешь попробовать разобраться в чем причина.

Может двойной бинд например.

trickster
17.10.2016
08:53:09
Ребята, расскажите за преимущества/недостатки сессий/localstorage

I
17.10.2016
08:55:36
сессию сдавать надо(

это недостаток

trickster
17.10.2016
08:56:42
:D:D:D

I
17.10.2016
08:56:43
ну а так что ты хочешь именно услышать? Что плохо хранить все данные юзера(историю просмотров на сервере, к примеру)? Да нет, не плохо, маркетологам каким-нибудь пригодится.

trickster
17.10.2016
08:57:00
ну вот корзина например

инет магаза

I
17.10.2016
08:57:22
я видел, как ее хранили, как у пользователя, так и на сервере

к примеру, создают объект класса Order(заказ), статус ему пихают new, к примеру. И тут же запихивают в него все, на что юзер кликнет

а потом можно зайти на следующий день с другого компа - и твоя корзина все так же висит с товарами

это плюс - ты можешь зайти с других девайсов и продолжить заказ(сел е***ий телефон, к примеру).

но это больше обращений к бд - поэтому можешь хранить на клиенте это. Но в таком случае твоя корзина будет с товарами только тот срок, который у тебя данные будут храниться на твоем клиенте - и при логине с другого компа/браузера у тебя будет пустая корзина

Страница 501 из 1684