我正在使用rspec文件中的 let 函数。我想使用 let 函数替换字符串实例变量的使用,就像我在下面用@astr一样。
describe "Static pages" do
let (:str) { "Ruby on Rails Tutorial Sample App" }
describe "Contact Page" do
it "should have title 'Contact'" do
@astr = "Ruby on Rails Tutorial Sample App"
visit '/static_pages/contact'
expect(page).to have_title("#{@astr} | Contact")
end
end
...
哪个成为
it "should have title 'Contact'" do
visit '/static_pages/contact'
expect(page).to have_title("#{str} | Contact")
end
令我困惑的是为什么#{str} 有效且#{:str} 没有 - 取消引用符号 - 就像我们保留'@'一样对于#{@ astr} ,为什么约定不适用于符号中的冒号?
答案 0 :(得分:1)
定义let(:str)...
后,str
成为一种方法。
因此,当你在测试中调用str
时,你不是在调用一个变量,而是一个返回你定义的东西的方法。
在我看来,let
对实例变量有三个好处。
更明确。
很懒。除非您调用它,否则该方法不会返回。但是变量总是被定义并存在于内存中。因此let
效率更高。
我自己的感觉。 str
作为方法,在我的编辑器中显示方法颜色,而实例变量显示另一个。在我的代码中,方法看起来更好,更清晰。