
Иван
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 для сложных валидаций.
остальное через шоулду
я давно в тесте модельки вручную не делаю.

Eugene
16.10.2016
22:47:15
вот это передаю

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

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

Alex
16.10.2016
23:01:24

Иван
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)
Потом их поддерживать проще будет.

Eugene
16.10.2016
23:11:06
А еще вопрос может у кого бывало что в navbar не показывалось drop-down меню с bootstrap
Как вы это фиксили

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

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, к примеру. И тут же запихивают в него все, на что юзер кликнет
а потом можно зайти на следующий день с другого компа - и твоя корзина все так же висит с товарами
это плюс - ты можешь зайти с других девайсов и продолжить заказ(сел е***ий телефон, к примеру).
но это больше обращений к бд - поэтому можешь хранить на клиенте это. Но в таком случае твоя корзина будет с товарами только тот срок, который у тебя данные будут храниться на твоем клиенте - и при логине с другого компа/браузера у тебя будет пустая корзина