Rspec 检查输入是否在 1-4 范围内的测试工作一次然后失败
Rspec test to check input is within range 1-4 works once then fails
无论我输入什么,我的 rspec 测试都失败了。
我正在 运行 测试以确保输入在 1-4 之间
而且它似乎只有在我输入 3 时才有效?
require 'order'
describe Order do
it 'gets dish input' do
order = Order.new
allow(order.input).to receive(:gets).and_return(:name)
end
it 'checks input' do
order = Order.new
expect(order.input).to eq (1..4)
end
end
呼叫order.rb
class Order
def initialize
input
end
def input
puts 'please select the number of your dish'
gets.chomp
end
def valid_range? input
input.to_i.between?(1..4)
end
end
谢谢
您可以将 Order
class 写为:
class Order
attr_reader :dish_number
def initialize
@dish_number = input.to_i
end
def valid_dish?
dish_number.between?(1, 4)
end
private
def input
puts 'please select the number of your dish'
gets.chomp
end
end
对应的规格应该是:
require_relative '../order.rb'
describe Order do
it 'gets dish number as input' do
allow_any_instance_of(Order).to receive(:input).and_return("1")
order = Order.new
expect(order.dish_number).to eq(1)
end
it 'checks valid dish' do
allow_any_instance_of(Order).to receive(:input).and_return("1")
order = Order.new
expect(order).to be_valid_dish
end
end
结果是:
[arup@Ruby]$ rspec spec/order_spec.rb
..
Finished in 0.00946 seconds (files took 0.12904 seconds to load)
2 examples, 0 failures
[arup@Ruby]$
正如 所说,这里是代码的 DRY 版本:
require_relative '../order.rb'
describe Order do
def new_order(input)
order = Order.new
allow(order).to receive(:input).and_return(input)
order
end
it 'gets dish number as input' do
expect(new_order("1").dish_number).to eq(1)
end
it 'checks valid dish' do
expect(new_order("1")).to be_valid_dish
end
end
无论我输入什么,我的 rspec 测试都失败了。 我正在 运行 测试以确保输入在 1-4 之间 而且它似乎只有在我输入 3 时才有效?
require 'order'
describe Order do
it 'gets dish input' do
order = Order.new
allow(order.input).to receive(:gets).and_return(:name)
end
it 'checks input' do
order = Order.new
expect(order.input).to eq (1..4)
end
end
呼叫order.rb
class Order
def initialize
input
end
def input
puts 'please select the number of your dish'
gets.chomp
end
def valid_range? input
input.to_i.between?(1..4)
end
end
谢谢
您可以将 Order
class 写为:
class Order
attr_reader :dish_number
def initialize
@dish_number = input.to_i
end
def valid_dish?
dish_number.between?(1, 4)
end
private
def input
puts 'please select the number of your dish'
gets.chomp
end
end
对应的规格应该是:
require_relative '../order.rb'
describe Order do
it 'gets dish number as input' do
allow_any_instance_of(Order).to receive(:input).and_return("1")
order = Order.new
expect(order.dish_number).to eq(1)
end
it 'checks valid dish' do
allow_any_instance_of(Order).to receive(:input).and_return("1")
order = Order.new
expect(order).to be_valid_dish
end
end
结果是:
[arup@Ruby]$ rspec spec/order_spec.rb
..
Finished in 0.00946 seconds (files took 0.12904 seconds to load)
2 examples, 0 failures
[arup@Ruby]$
正如
require_relative '../order.rb'
describe Order do
def new_order(input)
order = Order.new
allow(order).to receive(:input).and_return(input)
order
end
it 'gets dish number as input' do
expect(new_order("1").dish_number).to eq(1)
end
it 'checks valid dish' do
expect(new_order("1")).to be_valid_dish
end
end