ruby – 如何迫使黄瓜情景失败?

有没有办法迫使黄瓜情景失败?

我需要在每次测试结束时检查一些失败的情况.所以我认为我可以检查“错误”对话框,然后如果它发生则测试失败.

这可以通过下面的代码实现,但是存在问题.一旦我在失败中提出异常!函数,然后黄瓜停止运行After钩子的其余部分,因此注销函数不会被调用.

是:

After() do |scenario|  
  #Checking for Error popups
  if page.has_selector?(:dialog_message,1,:text => 'Error')
    fail!(raise(ArgumentError.new('Unexpected Error dialog!')))
  end
  logout
end

现在:

After() do |scenario|  
  #Checking for Error popups
  if page.has_selector?(:dialog_message,:text => 'Error')
    scenario.fail!(logout)
  end
end

是否有更好的方法可以在不引发异常的情况下通过黄瓜测试失败?

解决方法

您可以使用正常断言来获取挂钩失败.没有做过Capybara / rspec异常,但我认为你可以这样做:
page.should have_selector?(:dialog_message,:text => 'Error')

但是,如果您执行此操作或执行scenario.fail!(),您仍然无法注销.您需要将其包装在begin-ensure块中.

试试这个:

After do |scenario|
    begin
        page.should have_selector?(:dialog_message,:text => 'Error')
    ensure
        logout
    end
end

更新

如果您不想调用标准断言并直接使场景失败,您可以执行以下操作 – 您需要使用失败而不是失败!:

After() do |scenario|  
  begin 
    #Checking for Error popups
    if page.has_selector?(:dialog_message,:text => 'Error')
      fail(ArgumentError.new('Unexpected Error dialog!'))
      #Or you can just do fail('Unexpected Error dialog') if you do not care about the type.
    end
  ensure
    logout
  end
end

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...