Hai, saya pikir masalah ini serupa dengan https://github.com/rspec/rspec-core/issues/1163
Saat menggunakan subject(:initialize)
, rspec-core memunculkan kesalahan ArgumentError: wrong number of arguments (1 for 0)
Saya menggunakan spesifikasi ini untuk mensimulasikannya:
require 'rspec'
class LalaPopo
attr_reader :lala
def initialize
<strong i="12">@lala</strong> = 1
end
end
describe LalaPopo do
describe '.initialize_it' do
subject(:initialize) { described_class.new }
it 'does something' do
instance = initialize
expect(instance.lala).to eq 1
end
end
end
dan lari:
$ rspec test_rspec.rb
kesalahan yang saya terima:
Failures:
1) LalaPopo.initialize_it does something
Got 0 failures and 2 other errors:
1.1) Failure/Error: define_method(name) { __memoized.fetch_or_store(name) { super(&nil) } }
ArgumentError:
wrong number of arguments (1 for 0)
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/memoized_helpers.rb:295:in `block in let'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:588:in `new'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:588:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `block in run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/configuration.rb:1875:in `with_suite_hooks'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:113:in `block in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/reporter.rb:78:in `report'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:112:in `run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:87:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:71:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:45:in `invoke'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/exe/rspec:4:in `<top (required)>'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `load'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `<main>'
#
# Showing full backtrace because every line was filtered out.
# See docs for RSpec::Configuration#backtrace_exclusion_patterns and
# RSpec::Configuration#backtrace_inclusion_patterns for more information.
1.2) Failure/Error: define_method(name) { __memoized.fetch_or_store(name) { super(&nil) } }
ArgumentError:
wrong number of arguments (1 for 0)
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/memoized_helpers.rb:295:in `block in let'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:600:in `new'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:600:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `block in run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/configuration.rb:1875:in `with_suite_hooks'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:113:in `block in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/reporter.rb:78:in `report'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:112:in `run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:87:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:71:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:45:in `invoke'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/exe/rspec:4:in `<top (required)>'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `load'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `<main>'
#
# Showing full backtrace because every line was filtered out.
# See docs for RSpec::Configuration#backtrace_exclusion_patterns and
# RSpec::Configuration#backtrace_inclusion_patterns for more information.
2) LalaPopo.initialize_it does something
Got 0 failures and 2 other errors:
2.1) Failure/Error: define_method(name) { __memoized.fetch_or_store(name) { super(&nil) } }
ArgumentError:
wrong number of arguments (1 for 0)
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/memoized_helpers.rb:295:in `block in let'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:588:in `new'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:588:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `block in run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/configuration.rb:1875:in `with_suite_hooks'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:113:in `block in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/reporter.rb:78:in `report'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:112:in `run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:87:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:71:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:45:in `invoke'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/exe/rspec:4:in `<top (required)>'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `load'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `<main>'
#
# Showing full backtrace because every line was filtered out.
# See docs for RSpec::Configuration#backtrace_exclusion_patterns and
# RSpec::Configuration#backtrace_inclusion_patterns for more information.
2.2) Failure/Error: define_method(name) { __memoized.fetch_or_store(name) { super(&nil) } }
ArgumentError:
wrong number of arguments (1 for 0)
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/memoized_helpers.rb:295:in `block in let'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:600:in `new'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:600:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `block in run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/example_group.rb:590:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `map'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/configuration.rb:1875:in `with_suite_hooks'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:113:in `block in run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/reporter.rb:78:in `report'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:112:in `run_specs'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:87:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:71:in `run'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/lib/rspec/core/runner.rb:45:in `invoke'
# /home/fabio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rspec-core-3.6.0.beta2/exe/rspec:4:in `<top (required)>'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `load'
# /home/fabio/.rbenv/versions/2.1.5/bin/rspec:23:in `<main>'
#
# Showing full backtrace because every line was filtered out.
# See docs for RSpec::Configuration#backtrace_exclusion_patterns and
# RSpec::Configuration#backtrace_inclusion_patterns for more information.
Finished in 0.0011 seconds (files took 0.11722 seconds to load)
2 examples, 2 failures
Failed examples:
rspec ./test_rspec.rb:15 # LalaPopo.initialize_it does something
rspec ./test_rspec.rb:15 # LalaPopo.initialize_it does something
Saya tahu ini aneh untuk membuat subject(:initialize)
, tetapi saya menemukan masalah ini di sistem lama, ketika saya mencoba memutakhirkan rspec dari 3.0.0 ke 3.5.0!
Masalah ini terjadi karena fakta bahwa grup contoh RSpec adalah kelas, dan itu harus membuat instance dari mereka--di mana Ruby memanggil metode initialize
--untuk menjalankannya. Di RSpec 3.0.0, RSpec tidak mendefinisikan def initialize
, jadi ExampleGroup.new
tidak mengambil argumen apa pun, dan tidak menghasilkan kesalahan. Namun, contoh Anda masih tidak berfungsi dengan baik di RSpec 3.0.0--hanya saja tidak gagal dengan keras. Karena let
mendefinisikan sebuah metode, pada RSpec 3.0, ExampleGroup.new
menyebabkan initialize
dijalankan, artinya metode tersebut dijalankan dengan penuh semangat ketika let
didokumentasikan sebagai malas.
Semua itu untuk mengatakan: mengingat status khusus initialize
di Ruby, saya rasa kami tidak dapat mendukung let(:initialize)
. Jika Anda mengganti namanya menjadi sesuatu yang lain, itu akan berhasil.
Apakah menurut Anda RSpec harus mendeteksi ini sebelum mencoba mendefinisikan ulang #initialize
?
Apakah menurut Anda RSpec harus mendeteksi ini sebelum mencoba mendefinisikan ulang #initialize?
Maksud Anda ketika pengguna melakukan let(:initialize)
, haruskah RSpec memperingatkan pengguna tentang hal itu? Itu bukan ide yang buruk.
Komentar yang paling membantu
Maksud Anda ketika pengguna melakukan
let(:initialize)
, haruskah RSpec memperingatkan pengguna tentang hal itu? Itu bukan ide yang buruk.