ruby - 由于使用 ARGV 而不是 .gets,RSpec 测试失败

标签 ruby rspec

我正在构建一个程序,它需要从用户那里获取一个数字,但是当运行这样的程序时,用户会将其作为参数传递到控制台:“ruby name_of_program.rb --number 25” 我使用了 gets .chomp() 最初但因为它没有收集参数 25,所以我很快将其更改为 ARGV。我所有的 RSpec 测试都失败了,我收到以下消息:TypeError:nil can't be coerced into Integer。我想找出原因。我的程序按预期工作。我怎样才能让我的测试再次工作?

first_number = 2

given_number = ARGV.last
given_number = given_number.to_i

arr = []

def prime_numbers(first_number, given_number, arr)

  while(first_number <= given_number)
    prime_number = true
    x = 2

    while (x <= first_number / 2)
      if (first_number % x == 0)
        prime_number = false
        break
      end
      x += 1
    end

    if prime_number
      arr << first_number
    end

    first_number += 1
  end

  return arr

end

示例测试:

require 'prime_factors'

RSpec.describe 'prime_factors' do
  let(:array_one) { [2, 3, 5, 7] }
  let(:empty_array) { [] }
  let(:first_number) { 2 }

      context 'prime_numbers function' do

        it 'returns a list of prime numbers for a range 2 - 10 ' do
          given_number = 10
          expect(prime_numbers(first_number, given_number, empty_array)).to eq [2, 3, 5, 7]
        end


    end
    end

最佳答案

当你require这个程序(你似乎在做什么)时,它计算ARGV.last 返回nil,因为ARGV(很可能)是一个空数组。

我会将 prime_numbers 的定义放在一个单独的文件中,并在你的 rspec 测试中需要这个文件。

关于ruby - 由于使用 ARGV 而不是 .gets,RSpec 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921944/

相关文章:

mysql - 使用 Rails 检索 "top x"记录的最有效方法

ruby - youtube_it gem找不到视频时如何处理404响应

ruby-on-rails - 如何在 Eclipse/Aptana Studio 中调试 ruby​​ 测试?

ruby-on-rails - 配置 rspec-rails 生成器

ruby-on-rails - 指定显式 'subject' 时遇到问题?

ruby-on-rails - 为什么自动测试有时会在失败后立即重新运行所有规范?

ruby-on-rails - 使用 Rspec 进行测试会给出不完整的消息

ruby - 如何为两种环境配置god/redis?

ruby-on-rails - 如何使用/find_or_create_by 跳过验证?

ruby - 实例变量缓存的名称是什么?