Javascript capybara/rspec在页面上查找角度链接时遇到的问题

Javascript capybara/rspec在页面上查找角度链接时遇到的问题,javascript,ruby-on-rails,angularjs,rspec,capybara,Javascript,Ruby On Rails,Angularjs,Rspec,Capybara,我和一些同学正在制作AirBNB的Rails/Angular克隆,我似乎遇到了一些rspec/capybara问题 我有以下测试 上下文“用户可以添加空间”do 场景“添加空间”要做什么 访问“/” 单击链接“发布空间” 在“姓名”中填写:“我的酒店” 在“地点”中填写:“伦敦” 在“价格”中填写:“100” 附加文件“Image”、“spec/asset\u specs/photo/Elephant.jpg” 在“细节”中填写:“带套间的单人卧室” 填写“有效期”,日期:新(2016,03,

我和一些同学正在制作AirBNB的Rails/Angular克隆,我似乎遇到了一些rspec/capybara问题

我有以下测试


上下文“用户可以添加空间”do
场景“添加空间”要做什么
访问“/”
单击链接“发布空间”
在“姓名”中填写:“我的酒店”
在“地点”中填写:“伦敦”
在“价格”中填写:“100”
附加文件“Image”、“spec/asset\u specs/photo/Elephant.jpg”
在“细节”中填写:“带套间的单人卧室”
填写“有效期”,日期:新(2016,03,15)
填写“适用于”,日期:新(2016,03,15)
单击按钮“创建空间”
在“ul#spaces”内
期望(第页)有“地点:伦敦”的内容
期望(page.find('.space_thumb')['src'])中包含内容'Elephant.jpg'
结束
结束
结束
结束

我的观点如下

 <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>

还没有空间

  • {{space.name}} 位置:{{space.Location}

    价格:{{space.Price}}

    详细信息:{space.Details}

    可从:{{space.Available_from}

    可用对象:{{space.Available_to}

但是,当我使用默认驱动程序运行测试时,我得到以下错误

Capybara::ElementNotFound:
找不到“发布空间”链接

但是,当我使用selenium时,它可以工作,但是当我检查图像src时,它失败了,因为它返回了一个默认的missing.png文件。我猜仅仅是因为硒不允许水豚有足够的时间上传图片

是否有一个角度友好的驱动程序,我可以使用或我应该放弃这个,并在量角器或类似的测试


谢谢

默认的rack_测试驱动程序根本不处理JS,因此将其用于角度站点将是浪费时间(因为一切都是JS驱动的)。它找不到链接的原因是链接必须有一个
href
属性,您的标记没有该属性,但在运行后由angular JS添加(因此为什么使用rack_test测试角度驱动的站点是无用的)

对于图像测试-通过查找元素、获取src属性并进行比较,您禁用了等待行为(因为您提取的字符串无法自动重新加载)。相反,你应该这样做

expect(page).to have_selector('.space_thumb[src$="Elephant.jpg"]')

它可以重试匹配元素,最长可达Capybara.default_max_wait_时间秒,以便匹配元素出现。您可能需要根据实际页面中的src的外观调整css中属性选择器的类型(例如*=(包含),如果图像src有一个缓存破坏查询参数或任何东西)

您的
Capybara是什么。默认值\u max\u wait\u time
设置为什么?默认值为2秒,因此最好将其设置为更高的值。一旦你访问你的网页,它将超时,并在2秒钟后放弃,如果它找不到链接。尝试将其增加到5或10,看看这是否有帮助。