2014-01-05 18 views
2

將常量或引用的字符串傳遞給rspec以獲取類名是否有區別?引用RSpec中的類名稱

常數:

require 'spec_helper' 

describe Match do 
end 

引用:

require 'spec_helper' 

describe "Match" do 
end 

回答

2

的第一個參數describe是示例組的描述。然而,每https://www.relishapp.com/rspec/rspec-core/v/3-0/docs/subject/implicitly-defined-subject

如果第一個參數到最外面的示例基團是類,該類的實例 經由受試者 方法暴露於每個實施例。

它還補充道:

雖然下面的例子演示主題如何被用作 面向用戶的概念,我們建議您保留它支持的 定製的匹配器和/或延長從 例子中隱藏其使用的庫。

行爲規則比上面隱含的要複雜一點,但至少從RSpec 2.99開始。例如,非類參數仍然通過主題方法公開,但最內層的示例組優先。另外,關於實例化類的規則將適用,即使它不是最外面的示例組。

下面通過實施例說明更多的情況:

# simple case for class 
describe Object do 
    specify {subject.should be_an_instance_of(Object)} 
end 

# simple case for non-class 
describe "String" do 
    specify {subject.should be_eql("String")} 
end 

# nested non-class arguments; inner takes precedence 
describe "Outer String" do 
    describe "String" do 
    specify {subject.should be_eql("String")} 
    end 
end 

# nested class arguments; outer takes precedence 
describe Object do 
    describe Module do 
    specify {subject.should be_an_instance_of(Object)} 
    end 
end 

# class inside non-class; class takes precedence 
describe "String" do 
    describe Object do 
    specify {subject.should be_an_instance_of(Object)} 
    end 
end 

# class inside explicit subject; explicit subject takes precedence 
describe "Outer string" do 
    subject {"String"} 
    describe Object do 
    specify {subject.should be_eql("String")} 
    end 
end 

# class outside explicit subject; explicit subject takes precedence 
describe Object do 
    subject {"String"} 
    describe Module do 
    specify {subject.should be_eql("String")} 
    end 
end