当我以前运行'rake test'时,我会看到'''。或每次测试的'F'或'E'。 当一切顺利时,输出就是一行“。”
现在,即使我的所有测试都通过了,我看到的是'。'中的程序输出。
我不确定发布输出的最佳方式,但这是一个初始产品:
perrys-MacBook-Pro:iway perry_mac$ rake test:functionals --trace
** Invoke test:functionals (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:prepare
** Execute test:functionals
Loaded suite /Users/perry_mac/.rvm/gems/ruby-1.9.2-p290/gems/rake-0.9.2/lib/rake/rake_test_loader
Started
.........................."Welcome joe : "
."Welcome joe : "
."Welcome joe : "
."Welcome joe : "
.................."Welcome bob : "
...........
Finished in 0.998462 seconds.
58 tests, 81 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 15796
生成输出的代码行是: 应用程序/视图/布局/ application.html.erb
<div id="nav">
<% if current_user %>
<% str= "Welcome " + current_user.username + " : "%>
<%= p str %>
<%= link_to "Edit Profile : ", edit_user_path(current_user.id)%>
<%= link_to "Logout", :logout%>
<% else %>
<%= link_to "Register", new_user_path%> |
<%= link_to "Login", :login %>
<% end %>
</div>
“欢迎joe:”和“Welcome bob:”msgs是用户成功登录后看到的预期程序输出.bob和joe是在fixtures文件中创建的用户名。我无法弄清楚为什么现在可以在'rake test'中看到msgs。当我没有使用--trace时,我看到相同的行为。请评论A)为什么我看到一些节目输出而不是其余节目B)为什么我看到任何节目输出?
答案 0 :(得分:2)
Grep for “puts”或在您的应用或测试代码中写入 stdout 的其他代码。有些东西正在向stdout泄露数据。
看起来您的视图模板正在将内容发送到stdout以及视图:
<%= p str %>
p函数将字符串发送到stdout然后返回字符串。 &lt;%= ERB指令将值注入正在呈现的页面中,因此您将它打印到stdout / console并在页面中呈现它。这导致它在运行测试时出现在控制台上。