我正在编写一个脚本来自动对计算机上的文件进行排序,比如截图。我在Mac上。因此,每当我拍摄截图时,它都会在我的桌面上创建。脚本的一部分用途是不时清理桌面。
我见过的大多数Ruby脚本都是无类别的(har har),但是我决定将我的课程归类,所以我可以使用RSpec和TDD来测试一切,然后练习我的RGR循环。
在名为'Mover'的类中对名为'chdir'的方法运行RSpec测试时,我收到此错误:
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")
然后是规范:
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 repo,以防万一:https://github.com/swolegrammer/ruby-file-mover
答案 0 :(得分:0)
您忘记使用@mover.chdir
了。我会使用subject
代替before { @mover = Mover.new ... }
。
关于使用let vs subject vs之前我建议读一下这个rspec-style-guide问题: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