【问题标题】:Ruby TypeError: no implicit conversion of String into ArrayRuby TypeError:没有将字符串隐式转换为数组
【发布时间】:2014-11-08 18:33:33
【问题描述】:

我有一个测试返回TypeError: no impliciit conversion of String into Array,当它遇到我的代码的某个部分时。如果我在 rspec 之外运行代码,它运行得很好,所以我不确定为什么会这样。

require 'spec_helper'
require 'digital_ocean_size_list'

describe Chef::Knife::DigitalOceanSizeList do
  subject { Chef::Knife::DigitalOceanSizeList.new }

  let(:access_token) { 'FAKE_ACCESS_TOKEN' }

  before :each do
    Chef::Knife::DigitalOceanSizeList.load_deps
    Chef::Config['knife']['digital_ocean_access_token'] = access_token
    allow(subject).to receive(:puts)
  end

  describe "#run" do
    it "should validate the Digital Ocean config keys exist" do
      expect(subject).to receive(:validate!)
      subject.run
    end
....

它正在测试以下代码

require 'chef/knife/digital_ocean_base'

class Chef
  class Knife
    class DigitalOceanSizeList < Knife
      include Knife::DigitalOceanBase

      banner 'knife digital_ocean size list (options)'

      def run
        $stdout.sync = true

        validate!

        size_list = [
          ui.color('Slug',   :bold)
        ]

        client.sizes.all.each do |size|
          size_list << size.slug.to_s
        end

        puts ui.list(size_list, :uneven_columns_across, 1)
      end
    end
  end
end

类型错误来自 client.sizes.all.each。代码运行良好,我只收到来自 rspec 的类型错误。

【问题讨论】:

  • 你可以为这个错误创建一个SSCCE 吗?对于所有特殊类和要求,我无法自己测试您的代码。

标签: ruby testing rspec


【解决方案1】:

改变

size_list << size.slug.to_s

size_list << [size.slug.to_s]

在我的情况下,发生错误是因为我放入数组的值没有[],所以我用[] 包装它并且它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多