Heys伙计们我是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:
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个传递
答案 0 :(得分:1)
您还没有实现Die
类,因此它会记住它实例化的边数。
为此,您通常会使用实例变量,例如@num_of_sides
,并将其设置为构造函数中的sides
param, 后检查了有效输入。
要读取边数,您可以只返回@num_of_sides
的值(更改现有方法要简单得多,不需要取任何参数,只需返回值即可已存储,无需测试/逻辑或随机性),或者您可以使用为您创建该方法的快捷attr_reader :num_of_sides
。
值得回顾一下你对Ruby实例变量的任何注释,因为这似乎是你需要掌握的东西。或者你可以看看这个it's marked as final。