fac*_*ool 8 ruby testing automated-tests rspec
我写了功能测试,我需要做的测试取决于之前测试的通过.假设我有一个按钮,可以打开一个有功能的窗口.也就是说,为了检查这个功能,我需要先检查按钮的正确操作(即打开窗口或不起作用).因此,我需要这样做,如果单击按钮时测试失败,则测试不会运行以检查功能窗口.单独编写测试 - 对我来说不是一个选择.我想看到这样的事情:
describe "some tests" do
open_result = nil
it "should check work button" do
click_to_button()
open_result = window_opened?
open_result.should == true
end
if open_result
describe "Check some functional" do
it "should check first functional"
it "should check second functional"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我知道这种方法对rspec不起作用.这只是我想看到的简单描述.使用rspec可以实现吗?如果没有,还有其他方式(宝石等)
NIA*_*NIA 13
RSpec被设计为单元测试框架,因此从中获得完美的功能测试行为可能有点困难.在RSpec的哲学中,测试必须是独立的.使用自动测试时尤其重要:在这种情况下,执行顺序确实是不可预测的.伤心但真实.
当然,您仍然可以使用global($a)或instance(变量在测试之间保存一些状态.无论如何,你需要@a不确定此处)if进入it块状态,以便及时执行.pending如果不满足前提条件,您可以使用关键字来中断测试而不会失败.
但
我确信最好的解决方案是避免使用金锤反模式,而不是在单元测试框架中编写功能测试.您不想测试某些单独的功能.您确实想要测试方案.所以我建议尝试一些场景测试套件.
看,黄瓜!用法很简单:
在你的情况下,你会有features/step_definitions/gui_steps.rb类似的东西
Given /I pushed a button "(.*)"/ do |name|
@buttons.find(name).click() # This line is pseudo-code, you know
end
Run Code Online (Sandbox Code Playgroud)
和检查窗口打开等类似的东西(见例子).然后,您可以以任何方式组合已定义的步骤,例如,您的两个方案可能看起来像
Scenario: Feature 1
Given I pushed a button "go"
And I focus on opened window
When I trigger "feature 1"
Then I should se "result 1" in text area
Scenario: Feature 2
Given I pushed a button "go"
And I focus on opened window
When I trigger "feature 2"
Then I should se "result 2" in text area
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,如果某个场景步骤失败(比如我专注于打开的窗口 - 如果它没有打开),则不执行后续步骤 - 就像您想要的那样.作为奖励,您可以获得所发生事件和步骤的非常详细的输出(请参阅网站上的图片).
好消息是,您并不总是需要自己定义所有步骤.例如,当你测试一个Web应用程序,你可以使用像典型的东西webrat步骤,当我去到URL/A/B/C和那我应该看到文本"foo"的页面上.我不知道你使用的是哪个GUI测试框架,但可能已经有了它的步骤,所以我建议你谷歌在Cucumber%框架名称%.即使不是这样,一次编写这些步骤并不比尝试从RSpec制作Cucumber更困难.
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |