2013-11-15 72 views
1

我正在运行两个测试,其中一个失败,一个通过。唯一的区别是使用:should vs :expect。为什么一个测试工作,另一个不工作?Rspec:应该vs:期望与正则表达式

通过的测试:

it "returns no comma, when the integer is smaller than 1000" do 
    separate_comma(random_num(0, 999)).should match /^\d{1,3}$/ 
end 

失败的测试:

it "explanation" do 
    expect(separate_comma(random_num(0, 999))).to match /^\d{1,3}$/ 
end 

这里的无聊的东西:

def random_num(min, max) 
    rand(max - min + 1) + min 
end 

def separate_comma(number, delimiter = ',') 
    new = number.to_s.reverse.scan(/.../).join(delimiter) 
end 
+3

如果正则表达式在parens中,它工作吗?测试的输出是什么? –

+0

太棒了。那样做了,谢谢! –

回答

3

这不是一个答案,但一个相关的问题。以下规范通过了从OP代码复制的基本内容。有人可以解释为什么OP的规范在expect的情况下会失败,为什么围绕正则表达式的括号会有所作为? (注意:我正在使用Ruby 2.0和RSpec 2.14)

def random_num(min, max) 
    rand(max - min + 1) + min 
end 

def separate_comma(number, deliminator = ',') 
    new = number.to_s.reverse.scan(/.../).join(deliminator) 
end 

describe "rspec expectations involving match, regex and no parentheses" do 

    it "works for should" do 
    separate_comma(random_num(0, 999)).should match /^\d{1,3}$/ 
    end 

    it "works for expect" do 
    expect(separate_comma(random_num(0, 999))).to match /^\d{1,3}$/ 
    end 

end