这是我们的集成测试用例,它位于spec / features /下。 rspec的目的是首先登录,然后打开用户菜单页面并测试使用菜单页面上的链接。这是一个rails 3.2.12应用程序。这是rspec代码:
describe "CheckLinks" do
describe "GET /check_links" do
before(:each) do
...data...
visit '/'
save_and_open_page
fill_in "login", :with => @u.login
fill_in "password", :with => 'password'
click_button 'Login'
#save_and_open_page
end
it "works" do
visit user_menus_path
save_and_open_page
click_link('Project')
save_and_open_page
page.body.should have_content('Project#') #('Project Number')
end
end
端
rpsec错误很简单:
1) CheckLinks GET /check_links works
←[31mFailure/Error:←[0m ←[31mpage.body.should have_content('Project#') #('Project Number')←[0m
←[31mexpected to find text "Project#" in "Login Page"←[0m
←[36m # ./spec/features/check_links_spec.rb:116:in `block (3 levels) in <top (required)>'←[0m
我们发现,empty hash
之后会话为click_link('project')
,导致应用程序转到redirect_to signin
页面。但是在代码执行中,Project
链接页面确实将我们带到了项目的索引页面。为什么会话在empty hash
之后的rspec中变为click_link
。我们的rspec代码有问题吗?谢谢你的帮助。
答案 0 :(得分:1)
有几件事,首先我认为你的测试中不需要body
。只是做
page.should have_content('Project#')
此外,确保评估的('Project#')
是正确的。它试图从字面上匹配它。这可能是错误的,这就是你的失败。
最重要的是Capybara DSL,page
和visit
方法已被移至功能规格。它不适用于请求和控制器规格。请查看文档的upgrading to capybara 2部分。这可能是你的问题。您可以解决此问题,并将Capybara DSL纳入集成测试,方法是将其包含在spec_helper.rb
RSpec.configure do |c|
c.include Capybara::DSL, :example_group => {
:file_path => "spec/requests"
}
end
但是你应该在功能规范中真正做这种测试并遵循新的约定。