小编STT*_*STT的帖子

if + else和if之间的不一致 - >除非

我今天遇到了一个问题,我定义了我解决的自定义RSpec匹配器,但实际上看不出为什么其中一种方法有效,而另一种方法无效,这里是代码:

方法1 - if + else:

RSpec::Matchers.define :have_success_message do |message|
  match do |page|
    if message.nil?
      page.should have_selector('div.alert.alert-success')
    else
      page.should have_selector('div.alert.alert-success', text: message)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

方法2 - 如果遵循,则除非

RSpec::Matchers.define :have_success_message do |message|
  match do |page|
    page.should have_selector('div.alert.alert-success') if message.nil?
    page.should have_selector('div.alert.alert-success', text: message) unless message.nil?
  end
end
Run Code Online (Sandbox Code Playgroud)

我认为第一种方法更好,因为它只检查一次条件,但是,结果应该是相同的,对吧?

好吧,事实证明,第一种方法通过了测试,而第二种方法的测试则没有.我完全不知道为什么会这样,如果有人能够对此有所了解,我会很高兴.

编辑:

忘了添加实际测试(方法2):

使用以下HTML标记:

<div class="alert alert-success">Profile updated</div>
Run Code Online (Sandbox Code Playgroud)

我运行了4个单独的测试:

it { should have_success_message } # fails
it { should have_success_message('Profile updated') } # passes
it { should have_selector('div.alert.alert-success') } # passes
it …
Run Code Online (Sandbox Code Playgroud)

ruby rspec capybara railstutorial.org

8
推荐指数
1
解决办法
733
查看次数

标签 统计

capybara ×1

railstutorial.org ×1

rspec ×1

ruby ×1