2016-11-03 45 views
0

我创建一个Ruby on Rails的web应用程序,并有index.html.erb文件包含下面的代码我的意见之一:Ruby代码在我html.erb文件黄瓜测试期间不执行

<div class="container" id="quickTickets"> 
    <% Game.all.each do |game| %> 
     <h2> 
      <%= link_to game.name, game_tickets_path(game.id), :id => "gameid_"+game.id.to_s %> 
     </h2> 
    <%end%> 
</div> 

的代码工作正常,当我在浏览器中查看它,并显示一个标题为每个链接到一个单独的页面游戏。但是,当我运行Cucumber/Capybara测试来模拟点击其中一个标题时,它会失败。

测试失败,因为上面的Ruby代码块在运行Cucumber测试时未执行,所以页面最终包含空的<div>

例如,当我做出print page.html打电话来检查我的黄瓜测试上运行的HTML,它显示以下内容:

<div class="container" id="quickTickets"> 
</div> 

我已经花了几个小时试图找到任何文件或以前的错误像这样,但还没有找到解决方案。有任何想法吗?

回答

0

由于容器的div是在输出的代码被评估。可能发生的事情是,你实际上没有显示Game对象。这可能是因为你还没有创建测试任何游戏对象,或者是因为你使用的是JS能够驱动器和不使用交易(https://github.com/jnicklas/capybara#transactions-and-database-setup

+0

我把它加入游戏的工作还没有配置你的测试在我的Cucumber测试中直接对我的db。如果我理解正确,您必须在Cucumber测试本身中显式创建Game对象,而不是让测试与db交互? – user1874182

+0

@ user1874182测试一般都是在自己的环境与自己的数据库实例中运行,而数据库实例每次测试之间清除(或如果使用事务处理模式非JS能够司机跑这么没什么每居然被提交),以便测试彼此隔离。因此,每个测试都需要在数据库中创建需要测试的任何测试对象。 –