RSpec にミックスしているモジュールの RSpec で定義したインスタンス変数にアクセスしようとしていますが、これを機能させることができないようです。
単純化された仕様ファイルは、私が抱えている問題を示しています。
my_spec.rb
require 'rspec'
describe 'passing instance variables from specs into ruby mixins' do
it 'should pass the instance variable to the module' do
@a = 'a'
A.a.should == 'a'
end
it 'should pass the instance variable to the module in the module' do
@b = 'b'
A.b.should == 'b'
end
it 'should pass instance varisables from one module to the other' do
A.c.should == 'c'
end
end
module B
def b
return @b
end
def c
return @c
end
end
module A
extend B
@c = 'c'
def self.a
return @a
end
end
結果:
1) passing instance variables from specs into ruby mixins should pass the instance variable to the module
Failure/Error: A.a.should == 'a'
expected: "a"
got: nil (using ==)
# ./spec/my_spec.rb:6:in `block (2 levels) in <top (required)>'
2) passing instance variables from specs into ruby mixins should pass the instance variable to the module in the module
Failure/Error: A.b.should == 'b'
expected: "b"
got: nil (using ==)
# ./spec/my_spec.rb:11:in `block (2 levels) in <top (required)>'
基本的に、モジュールAとBの両方でインスタンス変数@a、@bにアクセスできるようにしたいです。クラス変数@@aと@@bを使用しようとしましたが、これは機能しません。
グローバル変数 ($a および $b) を使用できますが、これは機能しますが、悪であるグローバル変数であるため、これはエレガントではないと感じています。
作業コード:
require 'rspec'
describe 'passing instance variables from specs into ruby mixins' do
it 'should pass the instance variable to the module' do
$a = 'a'
A.a.should == 'a'
end
it 'should pass the instance variable to the module in the module' do
$b = 'b'
A.b.should == 'b'
end
it 'should pass instance varisables from one module to the other' do
A.c.should == 'c'
end
end
module B
def b
return $b
end
def c
return @c
end
end
module A
extend B
@c = 'c'
def self.a
return $a
end
end
何か案は?