【问题标题】:Rspec test for a Die's number of sides failingDie 面数的 Rspec 测试失败
【发布时间】:2015-09-21 16:46:35
【问题描述】:

大家好,我是rspec 的初学者@ 任何人都可以帮我解决这个问题。 而我的测试returns the number of sides that the die possesses 失败,我做错了什么??

require 'rspec'
require_relative 'die'

describe Die do
  describe '#initialize' do
    it 'expects a single argument' do
      expect(Die.instance_method(:initialize).arity).to eq 1
    end

    it 'raises ArgumentError if sides are < 1' do
      expect {
        Die.new(-1)
      }.to raise_error(ArgumentError)

      expect {
        Die.new(0)
      }.to raise_error(ArgumentError)
    end
  end


  describe 'Instance method' do
    before(:each) do
      @sides = rand(50)
      @die = Die.new(@sides)
    end
    context '#num_of_sides' do
      it 'expects method to have no arguments' do
        expect(Die.instance_method(:num_of_sides).arity).to eq 0
      end
      it 'returns the number of sides that the die possesses' do
        expect(@die.num_of_sides).to eq @sides
      end
    end
    context "#roll" do
      it 'expects roll method to have no arguments' do
        expect(Die.instance_method(:roll).arity).to eq 0
      end
      it "returns a random number between 1 and number_of_sides" do
        rolls = Array.new(10000) {@die.roll}.uniq.sort
        possible_values = (1..@sides).to_a
        expect(rolls).to eq possible_values
      end
    end
  end
end

Ruby Die 类:

class Die
  def initialize(sides)
    raise ArgumentError if sides < 1
  end

  def num_of_sides(sides=nil)
    if sides!=nil
      Random.rand(50)
    else
      0
    end
  end

  def roll()
  end
end

输出:6 个示例,2 个失败,4 个通过

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    您尚未实现 Die 类,以便它记住实例化它的边数。

    为此,您通常会使用实例变量,例如@num_of_sides,并将其设置为等于构造函数中的 sides 参数,您检查了有效输入之后。

    要读取边数,您可以只返回 @num_of_sides 的值(将现有方法更改为更简单,它不需要任何参数,只需要返回您存储的值,不需要测试/逻辑或随机性),或者您可以使用快捷方式 attr_reader :num_of_sides 为您创建该方法。

    值得回顾一下您对 Ruby 实例变量的任何注释,因为这似乎是您仍然需要掌握的内容。或者你可以看看这个Ruby Monk Primer on creating classes

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多