我不确定如何在测试说明中提供在前一块中定义的变量。这就是我的意思。
context "name" do
before do
@min_size = 1
@max_size = 255
end
context "is valid when it" do
it "has #{@min_size} character" do
expect(create(:person, name: Faker::Lorem.characters(@min_size))).to be_valid
end
it "has #{@max_size} characters" do
expect(create(:person, name: Faker::Lorem.characters(@max_size))).to be_valid
end
it "has between #{@min_size} and #{@max_size} characters" do
expect(create(:person, name: Faker::Lorem.characters((@min_size + @max_size)/2))).to be_valid
end
end
end
3次测试通过,但这是输出打印的方式。注意缺少的最小值和最大值。
name
is valid when it
has character
has characters
has between and characters
答案 0 :(得分:2)
您可以尝试这样的事情:
context "name" do
min_size = 1
max_size = 255
before do
@min_size = min_size
@max_size = max_size
end
context "is valid when it" do
it "has #{min_size} character" do
...
注意忽略{@ 1}}中的“@”签名。
答案 1 :(得分:1)
我不知道它是否比第一个答案更多或更少令人困惑,但考虑到在RSpec测试中不使用实例变量的好处(即因为如果未定义它们评估为nil
),可以使用let
代替before
,这允许您在整个示例中使用相同的变量。
context "name" do
min_size = 1
max_size = 255
let(:min_size) {min_size}
let(:max_size) {max_size}
context "is valid when it" do
it "has #{min_size} character" do
...