我正在使用Rails的tabnav插件,我想使用rpsec来确保它正确突出显示。
describe 'account navigation links' do
it 'should have account settings link' do
get '/account/settings'
response.should have_tag("li", :text => "Account Settings")
end
it 'should be highlighted' do
get '/account/settings'
response.should have_tag("li", :color => "Account Settings")
end
end
但是上面的代码似乎不起作用。我正在使用带有rspec btw的webrat。有帮助吗?感谢。
答案 0 :(得分:4)
这里唯一真正要测试的是,如果突出显示来自类名,是否应用了特定的类名。如果是这样,您可以have_tag("li.highlighted", :text => "Account Settings")
。
否则,您可能不应该自动测试CSS选择器本身是否正确应用。这是一个纯粹的表现细节,并不是测试套件设计用于测试的。我怀疑Webrat并不打算通过并为您应用样式表,因此测试该详细信息是不可行的,更不用说您可以只用一个页面加载检查它是否正常工作 - 毕竟,你是可以说在设计时测试样式表 。
反正。你的问题并没有真正说清楚你真正想要测试的是什么,但无论如何你不应该测试演示。测试HTML文档的结构很好,但确认客户端程序如何解释文档是设计者的角色,而不是程序员。 (如果你戴两顶帽子,那就这样吧,但不要混合你的食物。)
答案 1 :(得分:2)
describe 'highlighting' do
it 'should highlight account/settings' do
get '/account/settings'
response.should have_tag("a.active[href=?]", account_settings_path, /Account Settings/i)
end
it 'should highlight account/profile' do
get '/account/profile'
response.should have_tag("a.active[href=?]", account_profile_path, /Profile Information/i)
end
it 'should highlight account/picture' do
get '/account/picture'
response.should have_tag("a.active[href=?]", account_picture_path, /Profile Picture/i)
end
it 'should highlight account/notifications' do
get '/account/notifications'
response.should have_tag("a.active[href=?]", account_notifications_path, /Notifications/i)
end
it 'should not highlight Profile' do
get '/account/profile'
response.should_not have_tag("a.active[href=?]", account_settings_path, /Account Settings/i)
end
it 'should not highlight Notifications' do
get '/account/profile'
response.should_not have_tag("a.active[href=?]", account_notifications_path, /Notifications/i)
end
it 'should not highlight Picture' do
get '/account/profile'
response.should_not have_tag("a.active[href=?]", account_picture_path, /Profile Picture/i)
end
end
您可以编写更多测试,特别是“不会突出显示错误操作”方案,但我认为这已经足够了。
答案 2 :(得分:1)
如果你正在使用Sass,你可以使用Sass解析器解析它:
root = Sass::SCSS::Parser.new('.error { color: red; }', 'example.scss').parse
它会返回一个解析树,你可以通过潜入它来测试它。例如:
prop = root.children.select {|child| child.rule.flatten.include?('.error')}.first
prop_strings = prop.children.map {|p| [p.name.flatten.first, p.value].join(':')}
prop_strings.should include?('color:red')