我在网页上迭代树控件。单击树中的某些节点将更改FRAME_C中的内容,而单击其他节点则不会。如何过滤测试仅在内容发生变化时运行?这是我正在尝试的内容:
def viewDifferent?
if $prvView != $curView
return true
else
return false
end
end
...
describe "Exercising View" do
it "clicks a node in the tree control" do
$prvView = $b.frame( :id, 'FRAME_C').document.body.innertext
Timeout.timeout(50) do
spn.fire_event('onmouseup')
end
$curView = $b.frame( :id, 'FRAME_C').document.body.innertext
end
it "Runs only if the view is different", :if => viewDifferent? do
puts "Doing some stuff."
end
end
我的问题是RSpec在执行任何测试之前正在评估所有测试的过滤器。在上面的例子中viewDifferent?将始终(并且确实)返回false,因为前两个测试尚未设置两个全局变量。
有没有办法做我要问的事情?我已经试图解决这个问题好几天了。
答案 0 :(得分:1)
应始终运行测试。它应该设置执行您期望的代码路径所需的状态。在我看来,根据其他测试的结果有条件地执行测试完全打破了测试的精神。
您应该已经知道上一个视图和当前视图是不同的,如果不是您所期望的,那么您将失败。
每个测试都应该在您期望它执行的代码中有一个非常具体的路径,如果没有,您应该失败。没有办法做你想做的事,因为你不应该这样做。
答案 1 :(得分:0)
我不熟悉w / rspec,但您尝试使用Proc
吗?例如......
it "Runs only if the view is different", :if => lambda { viewDifferent? } do
puts "Doing some stuff."
end
作为速记的符号甚至可以起作用......
it "Runs only if the view is different", :if => :viewDifferent? do
puts "Doing some stuff."
end
正如您目前所拥有的那样,只要测试声明,它就会调用viewDifferent?
方法。你真正想要的是传递一个Proc
,以便在测试运行时调用它。