我和一些同学正在构建AirBNB的Rails / Angular克隆,我似乎有一些rspec / capybara问题!
我有以下测试...
context 'users are able to add a space' do
scenario 'adding a space' do
visit '/'
click_link 'Post a space'
fill_in 'Name', with: 'my hotel'
fill_in 'Location', with: 'London'
fill_in 'Price', with: '100'
attach_file "Image", "spec/asset_specs/photo/Elephant.jpg"
fill_in 'Details', with: 'single bedroom with ensuite'
fill_in 'Available from', with: Date.new(2016,03,15)
fill_in 'Available to', with: Date.new(2016,03,15)
click_button 'Create Space'
within 'ul#spaces' do
expect(page).to have_content 'Location: London'
expect(page.find('.space_thumb')['src']).to have_content 'Elephant.jpg'
end
end
end
end
我的观点如下......
<input id='search' ng-model='query'></br>
<section ng-if='spaces == false'>
<p>no spaces yet...</p>
</section>
<a ng-href='/spaces/new' id='post_space'>Post a space</a>
<section>
<ul id='spaces' ng-repeat='space in spaces | filter:query'>
<li>
<h5>{{space.name}}</h5>
<img class='space_thumb' ng-src={{space.image_url}}/>
<p>Location: {{space.location}}</p>
<p>Price: {{space.price}}</p>
<p>Details: {{space.details}}</p>
<p>Available from: {{space.available_from}}</p>
<p>Available to: {{space.available_to}}</p>
</li>
</ul>
</section>
但是当我使用默认驱动程序运行测试时,我收到以下错误...
Capybara::ElementNotFound:
Unable to find link "Post a space"
然而,当我使用selenium时,它会工作,但是我的测试检查图像src,它失败,因为它返回一个默认的missing.png文件。我猜是因为硒不允许水豚有足够的时间上传图片......
我是否可以使用角度友好的驱动器,或者我应该废弃它并在量角器或类似物中进行测试......
谢谢!
答案 0 :(得分:0)
默认的rack_test驱动程序根本不处理JS,因此将它与Angular站点一起使用将浪费时间(因为一切都是JS驱动的)。它没有找到链接的原因是链接必须有href
属性,你的标记不会,但是一旦它运行就由角度JS添加(因此为什么用rack_test测试角度驱动的站点是无用)
对于图像测试 - 通过查找元素,获取src属性然后比较它,您将禁用等待行为(因为您正在提取无法自动重新加载的字符串)。相反,你应该做类似
的事情expect(page).to have_selector('.space_thumb[src$="Elephant.jpg"]')
可以重试匹配元素,直到Capybara.default_max_wait_time秒,以便显示匹配元素。你可能需要调整css中属性选择器的类型,具体取决于真实页面中的src是什么样的(例如* =(包含),如果图像src有缓存破坏查询参数或任何东西)