我让这段代码前几天传递了所有规格,所以我把它移到另一个文件夹中(完成作业)。当我尝试从那里再次运行规范时,尽管按照我看到的方式完全键入了路径(几次),但我无法加载文件。 Hmmmm。是否有一些特殊的方法从子文件夹运行rspecs?无论如何,所以我把它移回了它所在的主目录,并从那里尝试,突然它不会通过!!我一定是不小心删了东西。但是对于我的生活差不多两天......我只是看看它。我已经完成了一百万次,看起来它应该正常工作,当我把这些方法带出课堂时,它们按预期返回。我需要新鲜的眼睛。为什么这段代码突然没有通过?
class :: Timer
attr_accessor :seconds, :padded, :time_string
def initialize(seconds = 0)
@seconds = seconds
end
def padded(num)
num = num.to_s
num.length == 1 ? "0#{num}" : "#{num}"
end
def time_string=(seconds)
@seconds = seconds
mins = 0
hours = 0
if seconds == 0
return "00:00:00"
elsif seconds < 60
return "00:00:#{padded(seconds)}"
end
while seconds > 59
mins += 1
seconds -= 60
if mins > 59
hours += 1
mins -= 60
end
end#while
return "#{padded(hours)}:#{padded(mins)}:#{padded(seconds)}"
end
end#class
以下是规格:
require_relative '09_timer'
describe "Timer" do
before(:each) do
@timer = Timer.new
end
it "should initialize to 0 seconds" do
@timer.seconds.should == 0
end
describe 'time_string' do
it "should display 0 seconds as 00:00:00" do
@timer.seconds = 0
@timer.time_string.should == "00:00:00"
end
it "should display 12 seconds as 00:00:12" do
@timer.seconds = 12
@timer.time_string.should == "00:00:12"
end
it "should display 66 seconds as 00:01:06" do
@timer.seconds = 66
@timer.time_string.should == "00:01:06"
end
it "should display 4000 seconds as 01:06:40" do
@timer.seconds = 4000
@timer.time_string.should == "01:06:40"
end
end
# One way to implement the Timer is with a helper method.
# Uncomment these specs if you want to test-drive that
# method, then call that method from inside of time_string.
#
describe 'padded' do
it 'pads zero' do
@timer.padded(0).should == '00'
end
it 'pads one' do
@timer.padded(1).should == '01'
end
it "doesn't pad a two-digit number" do
@timer.padded(12).should == '12'
end
end
end
答案 0 :(得分:1)
class :: Timer
attr_accessor :seconds
def initialize(seconds = 0)
@seconds = seconds
end
def padded(num)
num = num.to_s
num.length == 1 ? "0#{num}" : "#{num}"
end
def time_string
seconds = @seconds
mins = 0
hours = 0
if seconds == 0
return "00:00:00"
elsif seconds < 60
return "00:00:#{padded(seconds)}"
end
while seconds > 59
mins += 1
seconds -= 60
if mins > 59
hours += 1
mins -= 60
end
end#while
return "#{padded(hours)}:#{padded(mins)}:#{padded(seconds)}"
end
end#class
功能
require_relative '09_timer'
describe "Timer" do
before(:each) do
@timer = Timer.new
end
it "should initialize to 0 seconds" do
expect(@timer.seconds).to eq 0
end
describe 'time_string' do
it "should display 0 seconds as 00:00:00" do
@timer.seconds = 0
expect(@timer.time_string).to eq "00:00:00"
end
it "should display 12 seconds as 00:00:12" do
@timer.seconds = 12
expect(@timer.time_string).to eq "00:00:12"
end
it "should display 66 seconds as 00:01:06" do
@timer.seconds = 66
expect(@timer.time_string).to eq "00:01:06"
end
it "should display 4000 seconds as 01:06:40" do
@timer.seconds = 4000
expect(@timer.time_string).to eq "01:06:40"
end
end
# One way to implement the Timer is with a helper method.
# Uncomment these specs if you want to test-drive that
# method, then call that method from inside of time_string.
#
describe 'padded' do
it 'pads zero' do
expect(@timer.padded(0)).to eq '00'
end
it 'pads one' do
expect(@timer.padded(1)).to eq '01'
end
it "doesn't pad a two-digit number" do
expect(@timer.padded(12)).to eq '12'
end
end
end
我真的不知道你的代码是如何搞砸的,但是time_string
方法并没有在你的规范中采用任何参数,我也不明白它为什么会这样从逻辑的角度来看。因此,我从方法签名中取出=(seconds)
部分。
您还将实例变量@seconds
设置为传递的参数,但实际上我们想要使用以实例变量开头的本地seconds
变量,以便只需将其翻转为{ {1}}。
最后,我更改了您的规范,使用新的seconds = @seconds
语法而不是expect
should
。