在视图测试中,什么时候使用 before(:all)?
In views tests, when to use before(:all)?
我正在应用程序中编写一些视图测试,我的测试需要类似以下内容:
describe 'form' do
it 'has a search form' do
render
expect(rendered).to have_selector 'form[id=mock_search]'
end
it 'has a name filter' do
render
expect(rendered).to have_selector 'label[for=q_name_cont]', text: 'Nome do simulado'
expect(rendered).to have_selector 'input[id=q_name_cont]'
end
it 'has a submit button' do
render
expect(rendered).to have_selector 'input[type=submit][value="Buscar"][name=commit]'
end
it 'has a reset button' do
render
expect(rendered).to have_selector 'input[type=submit][value="Limpar filtros"]'
end
end
但是我和 before(:each) 在应用程序上重复太多请求,使我的测试花费 25 秒到 运行。我改成 before(:all) 然后变成 4 seconds.
- 我还应该使用 before(:each) 吗?
- 为什么不推荐 before(:all)?
编辑: 我之前的迭代:
before(:each) do
@school = build(:school)
@teacher = build(:teacher)
build_list(:mock_with_proccessed_statistics, 2, school: @school, teacher: @teacher)
@mocks = Mock.page(nil)
@q = Mock.ransack
allow(view).to receive(:current_school).and_return(@school)
allow(view).to receive(:format_date) { |date, format| date.strftime(format) }
end
before(:each)
在每个测试用例执行之前执行。和 before(:all)
在当前上下文中的所有测试用例之前一次。
describe 'form' do
#
#let! will create create instance variable school
#inside your test case and assign your school build. Different between
#let! and let is: let! create before every task. You won't need it to put
#on before block and let doesn't do that you have to call it explicitly to
#create that mock and get values..
let!(:school) { build(:school) }
let!(:teacher) { build(:teacher) }
let!(:statistics) { build_list(:mock_with_proccessed_statistics, 2, school: @school, teacher: @teacher) }
let!(:mocks) { Mock.page(nil) }
subject { render }
it 'has a search form' do
expect{ subject }.to have_selector 'form[id=mock_search]'
end
it 'has a name filter' do
expect{ subject }.to have_selector 'label[for=q_name_cont]', text: 'Nome do simulado'
expect{ subject }.to have_selector 'input[id=q_name_cont]'
end
end
我正在应用程序中编写一些视图测试,我的测试需要类似以下内容:
describe 'form' do
it 'has a search form' do
render
expect(rendered).to have_selector 'form[id=mock_search]'
end
it 'has a name filter' do
render
expect(rendered).to have_selector 'label[for=q_name_cont]', text: 'Nome do simulado'
expect(rendered).to have_selector 'input[id=q_name_cont]'
end
it 'has a submit button' do
render
expect(rendered).to have_selector 'input[type=submit][value="Buscar"][name=commit]'
end
it 'has a reset button' do
render
expect(rendered).to have_selector 'input[type=submit][value="Limpar filtros"]'
end
end
但是我和 before(:each) 在应用程序上重复太多请求,使我的测试花费 25 秒到 运行。我改成 before(:all) 然后变成 4 seconds.
- 我还应该使用 before(:each) 吗?
- 为什么不推荐 before(:all)?
编辑: 我之前的迭代:
before(:each) do
@school = build(:school)
@teacher = build(:teacher)
build_list(:mock_with_proccessed_statistics, 2, school: @school, teacher: @teacher)
@mocks = Mock.page(nil)
@q = Mock.ransack
allow(view).to receive(:current_school).and_return(@school)
allow(view).to receive(:format_date) { |date, format| date.strftime(format) }
end
before(:each)
在每个测试用例执行之前执行。和 before(:all)
在当前上下文中的所有测试用例之前一次。
describe 'form' do
#
#let! will create create instance variable school
#inside your test case and assign your school build. Different between
#let! and let is: let! create before every task. You won't need it to put
#on before block and let doesn't do that you have to call it explicitly to
#create that mock and get values..
let!(:school) { build(:school) }
let!(:teacher) { build(:teacher) }
let!(:statistics) { build_list(:mock_with_proccessed_statistics, 2, school: @school, teacher: @teacher) }
let!(:mocks) { Mock.page(nil) }
subject { render }
it 'has a search form' do
expect{ subject }.to have_selector 'form[id=mock_search]'
end
it 'has a name filter' do
expect{ subject }.to have_selector 'label[for=q_name_cont]', text: 'Nome do simulado'
expect{ subject }.to have_selector 'input[id=q_name_cont]'
end
end