尝试在RSpec has_selector行中使用正则表达式

时间:2011-05-25 15:55:01

标签: ruby-on-rails

我是Ruby / Rails / RSpec的新手,希望这是一个愚蠢/简单的问题。我正在为我们当前的项目编写RSpec测试。我目前正在做的是编写一个测试,用于在页面上显示上次登录时间/日期。

我想做的只是测试日期/时间是否以我们想要的格式出现。我正在使用正则表达式来检查格式。我正在创建正则表达式,然后尝试使用should have_selector这样的行(请原谅丑陋的正则表达式) -

it "should display last login date and time" do
  date_time_regex = /Last Login: [0-9][0-9]-[0-9][0-9]-[0-9][0-9], [0-9][0-9]:[0-9[0-9]]/
  visit root_path
  response.should have_selector("date_time", :content => date_time_regex)
end

当我尝试运行测试时,我收到以下错误 -

1) LayoutLinks when signed in should display last login date and time
 Failure/Error: response.should have_selector("date_time", :content => date_time_regex)
 NoMethodError:
   undefined method `include?' for #<Regexp:0xef2a40>
 # ./layout_links_spec.rb:60:in `block (3 levels) in <top (required)>'

所以看起来我无法传递正则表达式,但我不确定下一步该做什么?在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

date_time_regex = /Last Login: [0-9][0-9]-[0-9][0-9]-[0-9][0-9], [0-9][0-9]:[0-9[0-9]]/

response.should have_selector('data_time') do |data_time|
  data_time.should contain(date_time_regex)
end

...或

response.should have_selector('data_time') do |data_time|
  data_time.should =~ date_time_regex
end

答案 1 :(得分:4)

对您有帮助的一点是,您可以\d代替[0-9]。所以你得到

/Last Login: \d\d-\d\d-\d\d, \d\d:\d\d/

更具可读性。