Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 模具的Rspec试验';s失败的边数_Ruby_Rspec - Fatal编程技术网

Ruby 模具的Rspec试验';s失败的边数

Ruby 模具的Rspec试验';s失败的边数,ruby,rspec,Ruby,Rspec,嘿,伙计们,我是rspec的初学者,有谁能帮我解决这个问题吗。 我的测试返回模具拥有的边数失败,我做错了什么 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

嘿,伙计们,我是rspec的初学者,有谁能帮我解决这个问题吗。 我的测试
返回模具拥有的边数
失败,我做错了什么

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
需要“rspec”
需要相对的“死亡”
描述做什么
描述“#初始化”do
它“只需要一个参数”就可以了
expect(Die.instance_method(:initialize.arity))到等式1
结束
如果边数小于1,则会引发错误
期待{
新模具(-1)
}.引发_错误(ArgumentError)
期待{
新模具(0)
}.引发_错误(ArgumentError)
结束
结束
描述“实例方法”是什么
在…之前做
@侧面=兰特(50)
@模具=模具。新(@侧面)
结束
上下文“#num_of_side”do
它“期望方法没有参数”do
expect(Die.instance_method(:num_of_sides).arity)到等式0
结束
它“返回模具拥有的边数”do
期望(@die.num\u of_sides)。均衡@sides
结束
结束
上下文“#滚动”do
它“期望roll方法没有参数”do
expect(Die.instance_method(:roll.arity).to eq 0
结束
它“返回一个介于1和边数之间的随机数”
rolls=Array.new(10000){@die.roll}.uniq.sort
可能的_值=(1..@sides)。到_a
期望(转鼓)。均衡可能的_值
结束
结束
结束
结束
红宝石模具类:

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
类模具
def初始化(侧面)
如果边数小于1,则引发错误
结束
def num of_sides(sides=nil)
如果你站在一边=无
随机。兰特(50)
其他的
0
结束
结束
def辊()
结束
结束
输出:6个示例,2个失败,4个通过


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

为此,您通常会使用实例变量,例如
@num\u of_sides
,并在检查有效输入后,将其设置为构造函数中的
sides
参数

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

值得回顾一下关于Ruby实例变量的任何注释,因为这似乎是您仍然需要掌握的东西。或者你可以看看这个