2016-02-11 82 views
0

我正在編寫一個腳本來自動對我的計算機上的文件進行排序,如屏幕截圖。我在Mac上。所以每當我截圖時,它都會在我的桌面上創建。該腳本的一部分目的是時常清理桌面。我已經見過的大多數Ruby腳本都是無類的(har har),但是我已經決定讓我的類升級,所以我可以使用RSpec和TDD來測試我所做的一切,練習我的RGR循環。在RSpec測試中調用Model方法時出現NoMethodError

Failures: 

    1) Mover#chdir changes the directory 
    Failure/Error: chdir(@mover.target_dir) 

NoMethodError: 
    undefined method `chdir' for #<RSpec::ExampleGroups::Mover::Chdir:0x007ffae608f898> # ./spec/models/mover_spec.rb:18:in `block (3 levels) in <top (required)>' 

代碼本身:

class Mover 
    $home = Dir.home 

    attr_accessor :file_type, :working_dir, :target_dir 

    def initialize(file_type, working_dir, target_dir) 
    @file_type = file_type 
    @working_dir = working_dir 
    @target_dir = target_dir 
    end 

    def chdir(dir) 
    end 


end 

mover = Mover.new("/Screen Shot\s\d*.\d*.\d*\sat\s.*.png/g", "Desktop", "/Desktop/screenshots") 

然後規範

我上運行的方法的RSpec的測試稱爲在一個所謂的「移動器」類「的chdir」當收到此錯誤:

describe Mover do 
    before do 
    @mover = Mover.new("/Screen Shot\s\d*.\d*.\d*\sat\s.*.png/g", "Desktop", "/Desktop/screenshits") 
    end 

    describe "#initialize" do 
    it "Initializes the object." do 
     expect(@mover.class.name).to eq("Mover") 
    end 
    end 

    describe "#chdir" do 
    it "changes the directory" do 
     #chdir(@mover.target_dir) 
    end 
    end 

end 

該違規行被註釋掉。我真的被難住爲什麼會發生這種情況。任何幫助,將不勝感激。

鏈接到GitHub庫,以防萬一:https://github.com/swolegrammer/ruby-file-mover

回答

0

你忘了使用@mover.chdir代替。我會用subject而不是before { @mover = Mover.new ... }

關於使用let vs subject與之前我建議閱讀這個rspec樣式指南問題:https://github.com/reachlocal/rspec-style-guide/issues/6

describe Mover do 
    subject(:mover) { Mover.new("/Screen Shot\s\d*.\d*.\d*\sat\s.*.png/g", "Desktop", "/Desktop/screenshits") } 

    describe "#initialize" do 
    it "Initializes the object." do 
     expect(mover.class.name).to eq("Mover") 
    end 
    end 

    describe "#chdir" do 
    it "changes the directory" do 
     mover.chdir(mover.target_dir) 
    end 
    end 
end 
相關問題