我正在使用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测试失败原因的任何见解?
答案 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
只需运行规范并查看所写内容。无论如何,我很惊讶你没有得到未定义的局部变量异常