我已阅读rspec文档并搜索了其他地方,但是我很难理解Rspec的let
和let!
之间的区别。
据我所知,let
在需要时才初始化,并且其值仅在每个示例中缓存一次。我也了解到,let!
强制将变量立即存在,并强制对每个示例进行调用。由于我是新手,我很难看出这与以下示例有何关联。为什么需要使用let!
设置:m1
以断言页面上存在m1.content
,但可以使用let
设置:user
来断言页面包含text: user.name
?
subject { page }
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
let!(:m1) { FactoryGirl.create(:micropost, user: user, content: "Foo") }
let!(:m2) { FactoryGirl.create(:micropost, user: user, content: "Bar") }
before { visit user_path(user) }
it { should have_selector('h1', text: user.name) }
it { should have_selector('title', text: user.name) }
describe "microposts" do
it { should have_content(m1.content) }
it { should have_content(m2.content) }
it { should have_content(user.microposts.count) }
end
end
describe "after saving the user" do
before { click_button submit }
let(:user) { User.find_by_email('user@example.com') }
it { should have_selector('title', text: user.name) }
it { should have_success_message('Welcome') }
it { should have_link('Sign out') }
end
FactoryGirl.create(:microposts)
的结果。 - Leo Correa