1
我有一個RSpec問題。根據這個問題,我用紅寶石寫了一個解決方案。但使用RSpec運行時,當我期望得到的值,我在這裏得到nil
是RSpec的Ruby返回意外無
require '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
這是我寫的解決方案:
class Timer
attr_accessor :seconds, :time_string
def seconds=(num)
@seconds=num
end #seconds
def time_string
[email protected]%60
[email protected]/60
h=m/60
m=m%60
@time_string="%02d:%02d:%02d" %[h,m,s]
end #time_string
end #class
錯誤我得到
Failure/Error: expect(@timer.seconds).to eq(0)
expected: 0
got: nil
例如哪些失敗?你能顯示失敗的消息嗎? – Stefan
'失敗/錯誤:expect(@ timer.seconds).to eq(0) expected:0 got:nil' – radioactive001
順便說一下,你的'seconds ='方法是多餘的 - 'attr_accessor:seconds'實現了該方法您。另一方面,你可以刪除'attr_accessor:time_string',因爲你可能不想從外面設置'@ time_string'。也就是說,'@ time_string ='是多餘的(實例變量從不使用),你可以返回字符串。你可能想看看['divmod'](http://ruby-doc.org/core-2.4.1/Numeric.html#method-i-divmod),例如'h,m = m.divmod(60)' – Stefan