我一直在使用 watirspec-master 文件作为示例来编写我自己的 RSpec 测试。我最近遇到了需要测试单击或设置事件引发的异常的情况。我根据 checkbox_spec.rb 文件中的代码编写了以下测试。我只是将原始语法从 lambda 语法更改为预期语法。
el4 = browser.checkbox(:id, "category_8")
expect { el4.set }.to raise_error(ObjectDisabledException)
执行时,此代码会抱怨未初始化的常量 ObjectDisabledException。lambda 语法会产生相同的错误。完整的错误响应如下。
Failure/Error: lambda { el4.set }.should raise_error(ObjectDisabledException)
NameError:
uninitialized constant RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_2::Nested_1::Nested_1::Nested_1::ObjectDisabledException
Shared Example Group: "SF Categories tab" called from ./cf-manage/spec/_suite_sf_abusive_dev_spec.rb:135
# ./cf-manage/spec/_shared_sf_categories.rb:122:in `block (4 levels) in <top (required)>'
我寻找了一些关于raise_error方法的文档,但结果是空的。我的第一个想法是 ObjectDisabledException 是错误的值。但是该值在 watirspec-master 文件中重复使用。任何想法出了什么问题?
ObjectDisabledException(和其他Watir异常)是在Watir::Exception模块中定义的自定义异常。
要在规范中使用它们,您需要指定例外全名:
expect { el4.set }.to raise_error(Watir::Exception::ObjectDisabledException)
或者,如果你正在做大量的异常测试,你应该通过添加(在需要watir之后的某个点)来包含Watir::Exception模块:
include Watir::Exception
你可以在 watir-classic gem 的 implementation.rb 和 watir-webdriver 的 spec_helper.rb 中看到这一点。