我有这个Spec文件:
require 'spec_helper'
for i in 1..3
describe file ("/var/tmp/efl_test_0#{i}_link" )do
it { should be_linked_to "/tmp/efl_test_0#{i}" }
end
end预期结果为:
/var/tmp/efl_test01_link should be_linke_to /tmp/efl_test01
/var/tmp/efl_test02_link should be_linke_to /tmp/efl_test02
/var/tmp/efl_test03_link should be_linke_to /tmp/efl_test03实际结果是:
Failure/Error: it { should be_linked_to "/tmp/efl_test_0#{i}" }
stat -c %N /var/tmp/efl_test_01_link | egrep -e "-> ./tmp/efl_test_03."
Failure/Error: it { should be_linked_to "/tmp/efl_test_0#{i}" }
stat -c %N /var/tmp/efl_test_02_link | egrep -e "-> ./tmp/efl_test_03."
Failure/Error: it { should be_linked_to "/tmp/efl_test_0#{i}" }
stat -c %N /var/tmp/efl_test_03_link | egrep -e "-> ./tmp/efl_test_03."将每个链接与03目标进行比较。我想问题出在循环的某些方面。
我做错了什么?
发布于 2014-12-16 00:12:42
这可能是一个工件,说明i是如何被捕获为闭包的,并由describe稍后对其进行延迟计算。在这一点上,它是递增的。您可能需要故意捕获它:
for i in 1..3
path = "/tmp/efl_test_0#{i}"
describe file ("/var/tmp/efl_test_0#{i}_link" )do
it { should be_linked_to path }
end
end通常情况下,您会使用3.times do来实现更传统的Ruby。for构造几乎从未使用过。
发布于 2014-12-16 01:00:06
这是可行的:
require 'spec_helper'
3.times do |i|
describe file ("/var/tmp/efl_test_0#{i+1}_link" )do
it { should be_linked_to "/tmp/efl_test_0#{i+1}" }
end
end结果:
rspec ./spec/localhost/025_efl_test.rb:5 #
File "/var/tmp/efl_test_01_link" should be linked to "/tmp/efl_test_01"
rspec ./spec/localhost/025_efl_test.rb:5 #
File "/var/tmp/efl_test_02_link" should be linked to "/tmp/efl_test_02"
rspec ./spec/localhost/025_efl_test.rb:5 #
File "/var/tmp/efl_test_03_link" should be linked to "/tmp/efl_test_03"https://stackoverflow.com/questions/27488182
复制相似问题