Ruby on rails RSpec期望值从(…)。到(…)返回错误
我有以下代码:Ruby on rails RSpec期望值从(…)。到(…)返回错误,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我有以下代码: 它“绘制颜色C的一个h段”do editor.send:创建_图像,3,2 pp编辑器.image 期待{ pp editor.image#=>[[“O”,“O”,“O”],[“O”,“O”,“O”]] editor.send:draw_水平,0,1,0,'C' pp editor.image#=>[[“C”、“C”、“O”]、[“O”、“O”、“O”]] }.改变{ 编辑图像 }. from([“O”,“O”,“O”],[“O”,“O”,“O”]])。 致[“C”、“C”、“O
它“绘制颜色C的一个h段”do
editor.send:创建_图像,3,2
pp编辑器.image
期待{
pp editor.image#=>[[“O”,“O”,“O”],[“O”,“O”,“O”]]
editor.send:draw_水平,0,1,0,'C'
pp editor.image#=>[[“C”、“C”、“O”]、[“O”、“O”、“O”]]
}.改变{
编辑图像
}.
from([“O”,“O”,“O”],[“O”,“O”,“O”]])。
致[“C”、“C”、“O”]、[“O”、“O”、“O”]]
结束
因为调用方法:draw_horizontal
前后的两行代码都将中的内容从和返回给匹配器,所以我希望测试能够通过
事实上,我发现了这个错误:
我还试图从
中删除,只将保留到
,但这样做的结果是
有没有办法解决这个问题?谢谢这是瞎猜,但是试试这个
describe 'isolate this block to use `subject`' do # You'll have to name this accordingly
subject { editor }
before { editor.send :create_image, 3, 2 }
it 'draws one h-segment of colour C' do
expect { editor.send :draw_horizontal, 0, 1, 0, 'C' }.
to change(:image).
from([["O", "O", "O"], ["O", "O", "O"]]).
to [["C", "C", "O"], ["O", "O", "O"]]
end
end
我尝试了@benjamin sinclaire建议的解决方案,但不幸的是没有成功
为了解决这个问题,我必须评估数组的.To
,而不是它本身的值。
我不知道这是否是在比较通过引用而不是通过值传递的变量@image
的内容
it 'draws one h-segment of colour C' do
expect {
editor.send(:draw_horizontal, 0, 1, 0, 'C')
}.to change { editor.image.to_s }.
from([["O", "O", "O"], ["O", "O", "O"]].to_s).
to [["C", "C", "O"], ["O", "O", "O"]].to_s
end
这样做效果很好,但如果您找到了另一个(更好的)解决方案和解释,请在下面进行评论。干得好。更干净的方法是使用检查。它在数组上给出了相同的结果,但是使用inspect
是一个好习惯,因为它可以处理Ruby中的几乎所有内容。
describe 'isolate this block to use `subject`' do # You'll have to name this accordingly
subject { editor }
before { editor.send :create_image, 3, 2 }
it 'draws one h-segment of colour C' do
expect { editor.send :draw_horizontal, 0, 1, 0, 'C' }.
to change(:image).
from([["O", "O", "O"], ["O", "O", "O"]]).
to [["C", "C", "O"], ["O", "O", "O"]]
end
end
it 'draws one h-segment of colour C' do
expect {
editor.send(:draw_horizontal, 0, 1, 0, 'C')
}.to change { editor.image.to_s }.
from([["O", "O", "O"], ["O", "O", "O"]].to_s).
to [["C", "C", "O"], ["O", "O", "O"]].to_s
end