在RSpec中,有匹配器expect{}.to change{}.to
喜欢
expect{employee.change_name}.to change{employee.name}.to "Mike"
它非常容易阅读,但从语言的角度来看,它的工作原理并不容易理解。我认为expect
,to
和change
是方法,但它们被称为什么对象?在这种情况下,花括号是什么意思?
谢谢。
答案 0 :(得分:1)
他们在红宝石中是blocks
。
基本上是lambda表达式的第一步,基本上是匿名函数。
答案 1 :(得分:1)
change
和expect
是self
的方法,而to
是执行change
和expect
的结果的方法。 {}
表达式是传递给change
和expect
的块。
以下说明了评估顺序:
def self.to1(arg)
puts "to1(#{arg})"
"to1"
end
def self.to2(arg)
puts "to2(#{arg})"
"to2"
end
def self.expect
puts "expect"
yield
self
end
def self.change
puts "change"
yield
self
end
expect{puts "b1"}.to1 change{puts "b2"}.to2 "#{puts 'Mike' ; 'Mike'}"
产生以下输出:
expect
b1
change
b2
Mike
to2(Mike)
to1(to2)
=> "to1"