【问题标题】:NoMethodError when calling a Model method in an RSpec test在 RSpec 测试中调用模型方法时出现 NoMethodError
【发布时间】:2016-05-22 17:50:48
【问题描述】:

我正在编写一个脚本来自动对计算机上的文件进行排序,例如屏幕截图。我在 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

【问题讨论】:

    标签: ruby rspec tdd


    【解决方案1】:

    您忘记改用@mover.chdir。我会使用subject 而不是before { @mover = Mover.new ... }

    关于 let vs subject vs before 我建议阅读这个 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多