代码有效,但RSpec测试失败。 "期望nil成为String"的实例。

时间:2014-02-21 10:13:23

标签: ruby rspec

我正在使用Ruby和RSpec。 我写了一些代码,从文件中读取一些ascii图片,并根据i呈现正确的图片。代码有效:

class MyClass
  attr_accessor :pics

  def initialize
    @pics = get_frames
  end

  def draw_pic
    pics[i]
  end

  def get_frames
    frames = Dir.glob("ascii_frames/*").sort
    frames.map do |ascii| 
      open(ascii) do |file|
        file.read
      end
    end
  end
end

但是,RSpec测试没有。

# test_spec.rb

require_relative 'spec_helper.rb'

describe MyClass do
  before :each do
    @my_class = MyClass.new
  end

  describe "#draw_pic" do
    it "returns a string" do
      @my_class.draw_pic.should be_an_instance_of String
    end
  end
end

当我运行test_spec时,我得到错误“期望nil是String的一个实例”。我的其他测试示例工作正常,当我写draw_pic.class时,我得到了预期的String。

有关RSpec测试失败原因的任何见解?

1 个答案:

答案 0 :(得分:0)

def draw_pic
  pics[i]
end

什么是?无论如何,检查是否

Dir.glob("ascii_frames/*").sort

在dir中执行,你期望它。它看起来像@pics是空的,或者没有所需的元素。您可以使用一些调试输出来确定究竟发生了什么

class MyClass
  attr_accessor :pics

  def initialize
    @pics = get_frames
    puts "@pics = #{@pics}"
  end

  def draw_pic
    pics[i]
  end

  def get_frames
    frames = Dir.glob("ascii_frames/*").sort
    puts "frames = #{frames}"
    frames.map do |ascii| 
      open(ascii) do |file|
        file.read
      end
    end
  end
end

只需运行规范并查看所写内容。无论如何,我很惊讶你没有得到未定义的局部变量异常