用于检查号码的Rspec

时间:2018-09-24 11:33:01

标签: ruby rspec

我是红宝石新手,我设法提取了红宝石代码,但是为它们编写rspec似乎有问题。即使阅读了很少的教程,也很难理解编写rspec的方式。有人可以帮我写一个输入法,然后我会尝试重构其余的输入法。

RB文件:

module RubyOperations
  class Operations
    def input(num)
      RubyOperations.log('Enter a number:[Between 1 to 10]',:BOTH)
      num = Integer(gets.chomp)
      raise StandardError if num <= 0 || num > 10
      return num
    rescue StandardError, ArgumentError => e
      RubyOperations.log(e,:ERROR)
    end
  end
end

RSPEC:

describe 'RubyOperations' do
  describe 'Operations' do
    describe '.input' do
      context 'when number is provided' do
        it 'returns the number provided' do
          expect(RubyOperations.input(num)).to eq(Integer)
        end
      end
    end
  end
end

2 个答案:

答案 0 :(得分:0)

您可以检查方法输出的类是否等于整数

require 'ruby_final_operations'
  describe 'RubyOperations' do
    describe 'Operations' do
      describe '.input' do
        context 'when number is provided' do
          it 'returns the number provided' do
            expect(RubyOperations.input(num).class).to eq(Integer)
            (or)
            expect(RubyOperations.input(num)).to be_a_kind_of(Integer) 
          end
         end
        end
       end
      end

每当编写rspec时,请记住

如果您要为其编写rspec的方法可以处理数据库中的操作,则请检查数据库是否被操作

或者,如果您正在为返回对象的任何方法编写rspec,则按以下步骤操作

如果定义的方法类似

def square_of_a_number(num)
 num*num
end

然后像这样写rspec

it 'returns square of a number' do
  expect(square_of_a_number(2).to eq(4)   
end

对于您知道方法输出的任何方法,然后将输入或用户Faker gem硬编码为该方法的输入,以期望该方法的预期结果

答案 1 :(得分:0)

您共享的代码很少有问题:

1)在Operations类中,方法input接收到一个由于以下原因而在任何地方都不使用的参数:num = Integer(gets.chomp)。基本上gets是等待用户输入的方法,而赋值num = ...会覆盖传递给该方法的参数(num)的值,因此传递{{ 1}}参数作为方法。

2)在规范样本中,您在num模块上调用input方法,而RubyOperations位于命名空间input下的类Operations中。同样,方法RubyOperations不是类方法,而是实例方法。因此正确的方法调用将是:input

3)要运行RubyOperations::Operations.new.input(5)方法的规范,您需要对用户输入进行存根。 RSpec-mocks gem可以帮助您-https://github.com/rspec/rspec-mocks。它具有input存根方法:allow

整个样本将是:

allow(object).to receive(:gets) { "5" }