
Anton
01.06.2017
06:59:37

Artem
01.06.2017
07:00:52
или https://apidock.com/ruby/Enumerable/each_slice

Danny
01.06.2017
07:51:06
Вот мой вопрос, заданный конкретнее.
Я раньше делал такое на php.
Просто не знаю как реализовать это на rails.
Такким способом как в php не получаеться
Вот сам вопрос:
https://stackoverflow.com/questions/44300934/how-to-get-2-column-from-the-while-in-rails

Дмитрий
01.06.2017
07:53:59
Ребят, тут есть кто по тестированию с использованием rspec может ответить на вопросы?

Google

Sergey
01.06.2017
07:55:32
Скорее всего. Задавай вопросы

Дмитрий
01.06.2017
08:01:55
Имеется две группы тестов integration-тесты и unit-тесты. Сейчас пишу все используя unit-тесты. В какой момент начать писать integration-тесты?

Alexander
01.06.2017
08:02:01

Danny
01.06.2017
08:02:24

Дмитрий
01.06.2017
08:02:25
describe '#get_data' do
it 'should read YAML-formatted data from a file' do
expected = {'times' => ['10h 3m', '2h 5m', '40m']}
expect(get_data('spec/fixtures/good.yml')).to eq expected
end
it 'should error out if YAML is badly formatted' do
expect { get_data('spec/fixtures/bad.yml') }.
to raise_error(RuntimeError, /Error reading spec\/fixtures\/bad.yml/)
end
end В данном случае по мне это integration тест
describe '#get_data' do
it 'should read YAML-formatted data from a file' do
allow(YAML).to receive(:load_file).with('/some/file').and_return({'times' => ['10h 3m', '2h 5m', '40m']})
expect(get_data('/some/file').to eq({'times' => ['10h 3m', '2h 5m', '40m']})
end
it 'should error out if YAML is badly formatted' do
allow(YAML).to receive(:load_file).with('/some/file').and_raise(RuntimeError)
expect { get_data('/some/file') }.to raise_error(RuntimeError, /Error reading \'//some//file\'/)
end
end А это уже unit-тест


Alexander
01.06.2017
08:03:00
+
ну, судя по тому вопросу ("col-md-3 одна колонка") нужен offset
просто условия во вьюхе

Дмитрий
01.06.2017
08:05:03
Вопрос как в том. Вот начинаешь писать, и сначало пишешь unit-тест. На каком этапе происходит переход или нужно писать integration-тест,
?

No
01.06.2017
08:05:51
Смотря по какой методологии
Если BDD - ИМХО, тогда сначала интеграционный

Google

No
01.06.2017
08:06:04
потом юнит по необходимости
а так - я долго мучался данным вопросом и пришёл к выводу, что нет идеального флоу тестирования
попробуй несколько вариантов и работай как тебе удобнее получится в итоге

Дмитрий
01.06.2017
08:17:23
а как разделять оба теста? Внутри spec директории создать каталоги integration и unit. Или же в один test_spec.rb все класть?

No
01.06.2017
08:19:00
у меня отведена директория rspec/features под это
под интеграционные

Дмитрий
01.06.2017
08:21:49
Feature specs are high-level tests meant to exercise slices of functionality
through an application. They should drive the application only via its external
interface, usually web pages.
Вроде не подходит

Sergey
01.06.2017
08:36:06
С капибарой и браузером

No
01.06.2017
08:38:50
да, но разве асептанс тесты - не интеграционные тесты? )

Sergey
01.06.2017
08:39:03
Нет

No
01.06.2017
08:39:41
ну, я бы предпочел считать их разновидностью
подобный тест тестирует несколько модулей приложения
и их взаимодействие

Sergey
01.06.2017
08:39:55
Верно
Но асептанс это максимально приближенно к юзеру
Т.е. с браузером
Вдруг у тебя там где-то див закрывает важную кнопку

Google

Дмитрий
01.06.2017
08:42:42
Дело ведь не только в руби он рейлс. По сути тестируем весь код приложения который пишем, не только вэб. В этой статье автор тестирует метод #get_data, потом #process. Для #process он пишет unit-тест, а вот для #get_data он пишет integration-тест. Я задал автору вопрос он мне ответил, почему он должен менять поведение класса YAML? В этой же статье https://robots.thoughtbot.com/back-to-basics-writing-unit-tests-first меняют получается поведение и называют это white-box testing.
статью не скинул вот статья http://razorconsulting.com.au/rspec-testing-a-simple-ruby-script.html

v
01.06.2017
08:45:00


Дмитрий
01.06.2017
08:45:18
В смысле сразу?
def self.load_config
begin
YAML::load_file(data_file)
rescue => e
raise "Error reading #{data_file}: #{e}"
end
end
вот такой метод допустим
можно написать it 'should read YAML-formatted data from a file' do
expected = {'times' => ['10h 3m', '2h 5m', '40m']}
expect(get_data('spec/fixtures/good.yml')).to eq expected
end
it 'should error out if YAML is badly formatted' do
expect { get_data('spec/fixtures/bad.yml') }.
to raise_error(RuntimeError, /Error reading spec\/fixtures\/bad.yml/)
end
я правильно понимаю это integration-тест?
А можно еще написать вот так
describe '#get_data' do
it 'should read YAML-formatted data from a file' do
allow(YAML).to receive(:load_file).with('/some/file').and_return({'times' => ['10h 3m', '2h 5m', '40m']})
expect(get_data('/some/file').to eq({'times' => ['10h 3m', '2h 5m', '40m']})
end
it 'should error out if YAML is badly formatted' do
allow(YAML).to receive(:load_file).with('/some/file').and_raise(RuntimeError)
expect { get_data('/some/file') }.to raise_error(RuntimeError, /Error reading \'//some//file\'/)
end
end
И как я понимаю это уже unit-тест
Зачем оба эти теста?


Дмитрий
01.06.2017
08:48:11
писать

Sergey
01.06.2017
08:51:17
Я считаю если тест выглядит как describe "#method_name" то это все юнит
А интеграционные в рельсах это выхов метода контроллера, например

Дмитрий
01.06.2017
08:53:34
да, но сам def method_name может содержать вызовы других методов и даже сервисов и это навряд ли уже unit тест

v
01.06.2017
08:54:55

Alan
01.06.2017
08:57:26
Gil гарантирует потокобезопасность, исходя из того, как он работает, но опираться на это как на аксиому нельзя, потому что в любой момент может поменяться то как он работает и на это все источники указывают

Google

Alan
01.06.2017
08:59:14
С текущей реализацией gil он потокобезопасен
И там никогда не будет 1+1=1
Речь безусловно про оригинальный интерпретатор

Alexander
01.06.2017
09:00:58

Alan
01.06.2017
09:01:20
Именно, спасибо, забыл название)

Konstantin
01.06.2017
09:06:56

Alex
01.06.2017
09:07:10
в питоне нету, почему в руби появятся? :)

Alan
01.06.2017
09:08:27

Sergey
01.06.2017
09:08:28
https://twitter.com/yukihiro_matz/status/495219763883163648?lang=en

Konstantin
01.06.2017
09:09:08

Admin
ERROR: S client not available

Alan
01.06.2017
09:09:13

Konstantin
01.06.2017
09:09:54

Sergey
01.06.2017
09:10:12
Все правильно, руби то 3-й

Alex
01.06.2017
09:10:38
и выпустили они третий руби на третий год в год третьего солнцестояния и сказали что lts у него 3 года

Alan
01.06.2017
09:10:48

Konstantin
01.06.2017
09:11:07
Ну просто Матц когда приезжал на последний Rails Club в Москву, он вроде про потоки даже не заикнулся...

Alexander
01.06.2017
09:11:32

Konstantin
01.06.2017
09:11:40
Так что надежды слабоваты. Он там вроде больше по конкурентности и акторам угорает сейчас

Google

Alexander
01.06.2017
09:11:55

Sergey
01.06.2017
09:12:01

Konstantin
01.06.2017
09:12:31

v
01.06.2017
09:12:33

Konstantin
01.06.2017
09:14:26

Alexander
01.06.2017
09:14:40

v
01.06.2017
09:14:43

Alexander
01.06.2017
09:14:46
просто у тебя вычисления будут блочиться
но IO — нет

v
01.06.2017
09:15:30

Konstantin
01.06.2017
09:16:12
но IO — нет
Ну я про это и сказал вообще-то ) По факту ты параллелишь только IO вызовы вне руби и не более того

Alexander
01.06.2017
09:17:39

Konstantin
01.06.2017
09:18:33

v
01.06.2017
09:19:01
это разные вещи

Konstantin
01.06.2017
09:24:22
ты не сказал про GIl. ты сказал, что там потоки неполноценные.
Елки-палки, ну что за придирки к словам? ) Как можно называть "полноценными" потоки, которые не могут параллельно выполнять на нескольких ядрах собственный код? Их применение крайне примитивное и крайне ограниченное.
Все же это понимают прекрасно. Про GIL выше уже обсуждали ведь. В JRuby нормальные полноценые потоки с возможностью параллелить код, в MRI одно название от потоков, потому что сам код Ruby не параллелится от слова никак. Вот и все

v
01.06.2017
09:24:50
Так и можно
это ж не свойство потоков
непонятно, зачем ставить знак равенства между потоками и GIL
"одно название от потоков" - вот это вообще бред
как будто их единственное предназначение - обеспечивать настоящий параллелизм

Konstantin
01.06.2017
09:27:18
Ок, хорошо )