๋ค์์ ๊ณต์ ์ฌ์ ๊ทธ๋ฃน์ ์ฌ์ฉํ๋ ์ ์ฒด ์ฌ์ ์ ํ๊ตฐ์ ์คํํ์ฌ ์ป์ ์ญ์ถ์ ์ ์์ ๋๋ค.
8)
RuntimeError in 'Arel Join#each iterates over the rows in any order'
/Users/apatterson/git/arel/spec/../lib/arel/algebra/relations/operations/join.rb:14:in `hash'
/Users/apatterson/git/arel/spec/../lib/arel/session.rb:38:in `[]'
/Users/apatterson/git/arel/spec/../lib/arel/session.rb:38:in `read'
/Users/apatterson/git/arel/spec/../lib/arel/algebra/relations/relation.rb:21:in `each'
/Users/apatterson/git/arel/spec/support/matchers/have_rows.rb:5:in `have_rows'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/matchers/simple_matcher.rb:16:in `call'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/matchers/simple_matcher.rb:16:in `matches?'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/expectations/handler.rb:11:in `handle_matcher'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/expectations/extensions/kernel.rb:27:in `should'
/Users/apatterson/git/arel/spec/shared/relation_spec.rb:23:
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:40:in `instance_eval'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:40:in `execute'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_methods.rb:37:in `execute'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:214:in `run_examples'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:212:in `each'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:212:in `run_examples'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/example/example_group_methods.rb:103:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:23:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:22:in `each'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:22:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/options.rb:152:in `run_examples'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/lib/spec/runner/command_line.rb:9:in `run'
/Library/Ruby/Gems/1.8/gems/rspec-1.3.0/bin/spec:5
์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
1) ์ญ์ถ์ ์ ๊ฐ์ํ ๋ ๊ณต์ ์ฌ์์ ์ปจํ ์คํธ๊ฐ ๋ฌด์์ธ์ง ์ ํ ๋ชจ๋ฆ ๋๋ค. ์ผ๋ช ์ด๋์ ํฌํจ๋์๋์ง, ์ด๋ค ํ์ผ์ ํฌํจ๋์๋์ง ๋ฑ... 'Arel Join#each๋ ์์์ ์์๋ก ํ์ ๋ฐ๋ณตํฉ๋๋ค'๋ผ๋ ์ค๋ช ์ด ์์ง๋ง ์ฌ์์ด ๋ง์ ํ๋ก์ ํธ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ชจ๊ฐ ์์ต๋๋ค. ๋.
2) ํด๋น ๋จ์ผ ์ฌ์์ ์คํจํ๊ฒ ๋ง๋ ์ปจํ ์คํธ์์ ๊ฒฉ๋ฆฌํ์ฌ ์คํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ํฉ๋๋ค. ์ง๊ธ์ ์ด๋ป๊ฒ ํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
David, ๋๋ ์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
"it_should_behave_like"(๋๋ ๋ณ์นญ)๊ฐ ํธ์ถ๋๋ฉด ExampleGroup์์ ๋ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
๊ณต์ ์์ ๊ทธ๋ฃน์ ์ด๋ฆ์
๋๋ค.
"it_should_behave_like" ๋ฉ์๋ ํธ์ถ์ ํ์ผ ๊ฒฝ๋ก ๋ฐ ์ค ๋ฒํธ์
๋๋ค.
์์ ๊ฐ ์คํจํ๋ฉด RSpec์ ํด๋น ์์ ๊ฐ ๊ณต์ ์์ ๊ทธ๋ฃน์ ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ํ์ผ ๊ฒฝ๋ก์ ์ค ๋ฒํธ(ExampleGroup ๋ฉํ๋ฐ์ดํฐ์ ์ ์ฅ๋จ)๊ฐ ์ถ๋ ฅ์ ์ถ๊ฐ๋ฉ๋๋ค.
์ด๋ป๊ฒ ์๊ฐํด?
์ค ์ข๋ค์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์กด์ฌํฉ๋๋ค :-)
๊ณต์ ๊ทธ๋ฃน์ ํธ์ถํ๋ ํ์ ํ์ํ๋ @justinko์ ํจ์น(3906559d059bcdbd4d15303303c517088b038eeb)๋ฅผ ๋ณํฉ ํ์ผ๋ฏ๋ก ์ด์ ์คํ๋ ์ปจํ ์คํธ๋ฅผ ์ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ผ ๊ณต์ ์์ ๋ฅผ ์คํํ๋ ๋ฌธ์ ๋ฅผ ์ฌ์ ํ ์ด์ด ๋ก๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ณต์ ์์ ๊ฐ ์คํจํ ๋๋ฅผ ์ดํดํ๋ ๋ฐ ์ต์ํ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"
๋ฅผ ํตํด ๊ณต์ ๊ทธ๋ฃน์์ ๋จ์ผ ์์ ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ - ์ฌ์ค์ ๋๋ค. ๊ทธ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ๋ซ์ ๊ฒ์ด๋ค. @carllerche ์ด๊ฒ์ด ์ถฉ๋ถํ์ง ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ฌ๊ธฐ์ ๋๊ธ์
์ ์ฅ, ๋ค์๊ณผ ๊ฐ์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์์ต๋๋ค.
share_as :MySpecs do
let(:foo) { described_class # returns nil }
์กฐ์ฌ ์ค.
share_as๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ต๋๋ค. include
๋ฅผ ์ฌ์ฉํ์ฌ ํฌํจํ๋ ๋ชจ๋์ ์์ฑํฉ๋๋ค. ์ด๋ ์ด์ shared_examples_for
์์ ํ๋ ๊ฒ์ฒ๋ผ ์ค์ฒฉ ๊ทธ๋ฃน์ ์์ฑํ๋ ๊ฒ๊ณผ ๋งค์ฐ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค. ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
๋น์ถ์ฒ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ฒ์ RSpec์ ๋ฐฐ์ฐ๊ธฐ ์์ํ์ ๋ shared_examples_for
์ share_as
๊ฐ ์ ์๋์ง ํผ๋์ค๋ฌ์ ์ต๋๋ค.
๋๋ ์ต์์ ๊ทธ๋ฃน์ share_as
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
describe Model do
include MySharedSpecs
context 'it works' do
it_should_behave_like 'a working model'
shared_examples_for
๋ก ์ ํํ๋๋ฐ ๋ชจ๋ ๊ฒ์ด ์ ์์
๋๋ค. ๊ฐ์ฌ ํด์.
๋งจ ์๋๋ก ๊ฑด๋๋ฐ๋ ์ฌ๋์ ์ํด ์ ๋ justinko๊ฐ ์์์ ์ด์ ๋ํด ์์ ํ ๋ง์กฑ์ค๋ฌ์ด ๋ต๋ณ์ ์ ๊ณตํ๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค.
rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"๋ฅผ ํตํด ๊ณต์ ๊ทธ๋ฃน์์ ๋จ์ผ ์์ ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
rspec spec/my_spec_that_contains_the_shared_group.rb --example "hello world"
๋ฅผ ํตํด ๊ณต์ ๊ทธ๋ฃน์์ ๋จ์ผ ์์ ๋ฅผ ์คํํ ์ ์์ต๋๋ค.