
Dmitriy
28.12.2016
09:41:48
какая то странная ситуация
в гугле пишу falsy or falsey rspec
и ничего про falsy
expect(actual).to be_falsey # passes if actual is falsy (nil or false)

Google

Alex
28.12.2016
09:42:55
Смотри
Все что в рспеке be_* прозрачно дергает метод *?
Например be_alive - alive?
Теперь вопрос, как разобраться с фалси?

Dmitriy
28.12.2016
09:44:53
ммм, туго что то
false?

Alex
28.12.2016
09:45:06
Блжад
Ну провень есть такой метод или нет

Ilya
28.12.2016
09:45:22
кароче
это одно и то же
алиасы
https://github.com/rspec/rspec-expectations/blob/7f1ed3fd0ee95b94a538696c16351dc8dd63a5bd/lib/rspec/matchers.rb#L326

Alex
28.12.2016
09:46:21
expect(model).to be_alive
Тоже самое что
expect(model.alive?).to be(true)

Google

Alex
28.12.2016
09:46:32
Так доступнее?

Ilya
28.12.2016
09:46:45
эмммм

Dmitriy
28.12.2016
09:46:46
да!)

Ilya
28.12.2016
09:46:55
model.falsey?

Alex
28.12.2016
09:47:01
Ну

Ilya
28.12.2016
09:47:23
nil.falsey?
NoMethodError: undefined method `falsey?' for nil:NilClass

Alex
28.12.2016
09:47:48
В контексте рспека?

Ilya
28.12.2016
09:49:16
я сомневаюсь, что рспек манкипатчит кор классы)
или переопределяет method_missing)
да, так и есть
nil.falsey?
NoMethodError: undefined method `falsey?' for nil:NilClass
это в контексте rspec

Dmitriy
28.12.2016
09:52:49
expect(Achievement.first(achievement.id)).to be_empty
как думаете, так выгялядит криво?

Ilya
28.12.2016
09:54:14
немного, как по мне

Dmitriy
28.12.2016
09:54:29
в общем я так понимаю есть полно способов
проверить метод destroy

Ilya
28.12.2016
09:55:03
да, но суть в том, что тебе надо выбрать наиболее точно отражающий конкретно твою ситуацию
чтобы в любых других тест не проходил

Dmitriy
28.12.2016
09:56:07
ну тогда так
delete :destroy, params: {id: achievement}
expect(Achievement.exists?(achievement.id)).to be_falsy
лучше всего думаю, логично выглядит

Google

Ilya
28.12.2016
09:56:46
be false :)
у тебя же там nil ну никак не появится)

Dmitriy
28.12.2016
09:57:39
ну так то да)
без смысленно falsy использовать

Ilya
28.12.2016
09:57:50
ну так и пиши

Alex
28.12.2016
09:58:27
О госпаде

Dmitriy
28.12.2016
09:58:32
expected false to respond to false? or perhaps you meant be false or be_falsey
ощибка)

Alex
28.12.2016
09:58:44
Ты релоад уже попробовал или ты так и будешь с фалси играть?

Dmitriy
28.12.2016
09:59:05
ахах, сейчас попробую)

Alex
28.12.2016
09:59:15
ахах, сейчас попробую)
Перепробовал самые экзотические решения вместо нормльных, а о нормальных рекомендациях забыл

Ilya
28.12.2016
09:59:51

Alex
28.12.2016
10:00:33
Хорошо, в следующий раз распишу формальным языком, устроит?

Ilya
28.12.2016
10:02:56
просто можно добавить небольшое уточнение.
Achievement.exists?(achievement.id) вполне нормальный вариант, потому что выполнится запрос в базу.
просто он немного длиннее по количеству символов

Dmitriy
28.12.2016
10:04:08
expect(achievement.reload).to raise_error
ActiveRecord::RecordNotFound:
Couldn't find Achievement with 'id'=271
а какой матчер можно использовать
?

Ilya
28.12.2016
10:05:45
https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher

Google

Ilya
28.12.2016
10:05:56
ты забыл про {} вместо ()

Dmitriy
28.12.2016
10:07:04
ага работает

Alex
28.12.2016
10:07:29
Ну это два наверное самых честных метода
Впрочем многие по count проверяют и не парятся

Dmitriy
28.12.2016
10:08:08
ну для меня уже какие то знания
что есть различные варианты

Alex
28.12.2016
10:08:39
https://www.relishapp.com/rspec/rspec-expectations/v/2-2/docs/matchers/expect-change
что есть различные варианты
Самое забавное, что когда ты осваиваешь тестирование, ты быстро понимаешь что там еще много с чем надо разобраться
Грамотно тестировать это искусство.

Admin
ERROR: S client not available

Zulkar
28.12.2016
10:10:08
поэтому есть отдельная профессия тестировщика )

Alex
28.12.2016
10:16:33

Alexander
28.12.2016
10:36:23
походу, я буду впервые осознанно использовать переменные класса (@@)
нужно именно с передачей потомкам, забавно
и не константа
но rubocop против(

Ilya
28.12.2016
10:37:59
а что пишет?

I
28.12.2016
10:40:53
можно отключить это правило =)

Alexander
28.12.2016
10:47:42

Google

Alexander
28.12.2016
10:47:56
dynamic constant assigment ему тоже не нравится(
а что пишет?
пишет юзать переменные инстанции класса (@ в классе)

Ilya
28.12.2016
10:50:44
запихни в редис
?
шутка
надо бы почитать
обоснование

Alexander
28.12.2016
10:52:14
обоснование
оно как раз в том, что мне нужно:
https://github.com/bbatsov/ruby-style-guide#no-class-vars
всё, сделал вроде через классовый метод модуля, как в прошлый раз с аналогичной проблемой

Ilya
28.12.2016
10:57:03
инстанс переменную?

Alexander
28.12.2016
11:25:12
инстанс переменную?
ну class instance variable для модуля, да)
module Module
def self.var
@var = 'var'
end
end

Alex
28.12.2016
11:25:42
интересное решение
работает хоть?

Alexander
28.12.2016
11:26:41

Dmitriy
28.12.2016
11:40:47
p assigns[:achievement]
p assigns(:achievement)
выводит как я вижу одно и тоже

Alex
28.12.2016
11:41:47
а не должен, потому что assigns не нужен

Dmitriy
28.12.2016
11:42:47
а как я проверю в методе create идет ли редирект на страницу нового объекта

Alex
28.12.2016
11:43:00
что?
как проверить что контроллер вернул редирект?