将常量或带引号的字符串传递给类名的 rspec 有什么区别吗?
常数:
require 'spec_helper'
describe Match do
end
引用:
require 'spec_helper'
describe "Match" do
end
最佳答案
describe
的第一个参数是该示例组的描述。但是,根据 https://www.relishapp.com/rspec/rspec-core/v/3-0/docs/subject/implicitly-defined-subject :
If the first argument to the outermost example group is a class, an instance of that class is exposed to each example via the subject method.
它还添加了:
While the examples below demonstrate how subject can be used as a user-facing concept, we recommend that you reserve it for support of custom matchers and/or extension libraries that hide its use from examples.
行为规则比上面暗示的要复杂一点,但是,至少从 RSpec 2.99 开始是这样。例如,非类参数仍然通过 subject 方法公开,但最里面的示例组优先。此外,关于实例化类的规则将适用,即使它不是最外层的示例组。
以下传递示例说明了更多情况:
# 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
关于ruby-on-rails - 在 RSpec 中引用类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939175/