我正在使用Rspec和Selenium设置一些自动化测试,我遇到了一些尝试以编程方式创建示例的问题。
我有一个包含多个项目的数组,需要根据数据的变化多次测试。
数组:
def get_array
@stuff = { thing1, thing2, thing3 }
end
测试的简化版本:
describe "My tests" do
context "First round" do
before { #do some stuff }
@my_array = get_array
@my_array.each do |k|
it "should pass the test" do
k.should pass_the_test
end
end
end
context "Second round" do
before { #do some other stuff }
@my_array = get_array
@my_array.each do |k|
it "should pass the test" do
k.should pass_the_test
end
end
end
end
在这个例子中并不是太糟糕,但每次都要调用@my_array = get_array绝对不是DRY。随着我添加更多测试和复杂性,这很快就会失控,所以我想知道我失踪的更简单/更好的方法是什么。
我尝试过共享的上下文和我能找到的任何其他内容,但似乎没有任何效果。
答案 0 :(得分:1)
在阅读你的评论之后,@ benny-bates,我意识到问题不是前一块,而只是在调用测试之前初始化变量。不幸的是,将实例变量转换为常量似乎是最好的方法。
describe "My tests" do
STUFF = {thing1, thing2, thing3}
context "First round" do
before { #do some stuff }
STUFF.each do |k|
it "should pass the test" do
k.should pass_the_test
end
end
end
context "Second round" do
before { #do some other stuff }
STUFF.each do |k|
it "should pass the test" do
k.should pass_the_test
end
end
end
end