@proRuby

Страница 577 из 1594
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-тесты?

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-тест

Дмитрий
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
у меня отведена директория rspec/features под это
Тут, скорее всего, речь про асептанс тесты

С капибарой и браузером

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

Дмитрий
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

Речь безусловно про оригинальный интерпретатор

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

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

Alan
01.06.2017
09:08:27
Хм... Где-то появилась информация о том, что в руби появятся полноценные потоки?
Речь не о полноценных потоках, кстати не в mri они есть

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
https://twitter.com/yukihiro_matz/status/495219763883163648?lang=en
Простите, не видел такого, но пруф отличный!)

Konstantin
01.06.2017
09:09:54
https://twitter.com/yukihiro_matz/status/495219763883163648?lang=en
Спасибо, но 3-й год уже пошел...

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

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

Alan
01.06.2017
09:10:48
Спасибо, но 3-й год уже пошел...
Информация есть? Есть. Осведомлён- значит вооружён)

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

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

Google
Sergey
01.06.2017
09:12:01
Konstantin
01.06.2017
09:12:31
давно уже есть инфа. Ruby 3, ~ 2020 год
Ну я не претендую на абсолютную истину, просто спрашиваю. Хорошо, если так, но чет пока грустно с этим.

Konstantin
01.06.2017
09:14:26
а они разщве и так не полноценные?
Ну учитывая, что код руби на них параллелить нельзя, то в этом смысле нет, не полноценные

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

но IO — нет

v
01.06.2017
09:15:30
Ну учитывая, что код руби на них параллелить нельзя, то в этом смысле нет, не полноценные
многопоточные приложения были задолго до распространения многоядерных процессоров

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

Konstantin
01.06.2017
09:18:33
ну код параллелится, его выполнение — нет)
ну блин )) вы ведь понимаете, о чем я, все понимают )

v
01.06.2017
09:19:01
и как это соотносится с тем, что я сказал про GIL? )
ты не сказал про GIl. ты сказал, что там потоки неполноценные.

это разные вещи

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
Ок, хорошо )

Страница 577 из 1594