【发布时间】:2015-11-09 18:19:55
【问题描述】:
我正在使用 Capybara + Rspec 为旧版应用程序编写测试,我发现我的所有测试都需要在特定框架内运行。我编写了一个小 rspec 帮助程序,我在每次测试之前运行它以确认我正确设置了会话,然后访问 URL:
def set_session
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(
app,
window_size: [1280, 1024] ,
timeout: 60
)
end
Capybara.javascript_driver = :poltergeist
@sess = Capybara::Session.new :poltergeist
#authentication stuff here...
end
describe 'initiate_requests' do
before(:all) do
set_session
end
before(:each) do
@sess.visit(URL)
end
it 'shows error if not degree seeking student' do
@sess.within_frame(FRAME) {
set_test_vars(FAILID)
expect(@sess).to have_selector("#NO_PROGRAM_ERROR")
expect(@sess).not_to have_selector("#submitButton")
}
end
it 'works for a degree seeking student' do
@sess.within_frame(FRAME) {
set_test_vars(VALIDID)
expect(@sess).not_to have_selector("#NO_PROGRAM_ERROR")
expect(@sess).to have_selector("#submitButton")
}
end
end
这很好用。但是,我需要以以下形式编写每个测试:
it 'works for a degree seeking student' do
@sess.within_frame(FRAME) {
#do tests..
}
end
有什么方法可以让@sess 一直在框架内工作吗?缺少这一点,有什么方法可以让我只声明一次 @sess.within_frame(FRAME) 并让所有测试都遵循该声明?
【问题讨论】:
标签: ruby unit-testing rspec capybara poltergeist