Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – csv.read嘲笑文件的rspec测试结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用红宝石1.9,我正在尝试做BDD.我的第一个测试’应该读取在csv的作品,但第二个我需要一个文件对象被嘲笑没有.

这是我的型号规格:

require 'spec_helper'

describe Person do
  describe "Importing data" do
    let(:person) { Person.new }

    let(:data) { "title\tsurname\tfirstname\t\rtitle2\tsurname2\tfirstname2\t\r"}
    let(:result) {[["title","surname","firstname"],["title2","surname2","firstname2"]] }

    it "should read in the csv" do
      CSV.should_receive(:read).
        with("filename",:row_sep => "\r",:col_sep => "\t")
      person.import("filename")
    end

    it "should have result" do
      filename = mock(File,:exists? => true,:read => data)
      person.import(filename).should eq(result)
    end
  end
end

以下是到目前为止的代码:

class Person < ActiveRecord::Base
  attr_accessor :import_file

  def import(filename)
    CSV.read(filename,:col_sep => "\t")
  end
end

我基本上想要模拟一个文件,所以当CSV方法试图从文件中读取它返回我的数据变量.那么我可以测试它是否等于我的结果变量.

解决方法

你可以存档File.open:
let(:data) { "title\tsurname\tfirstname\rtitle2\tsurname2\tfirstname2\r" }
let(:result) {[["title","firstname2"]] }

it "should parse file contents and return a result" do
  expect(File).to receive(:open).with("filename","rb") { StringIO.new(data) }
  person.import("filename").should eq(result)
end

StringIO基本上包装一个字符串,使其表现得像一个IO对象(在这种情况下为File)

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – csv.read嘲笑文件的rspec测试结果全部内容,希望文章能够帮你解决ruby-on-rails – csv.read嘲笑文件的rspec测试结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: