为什么我在'rake test'期间看到输出而不是'。' 'F'或'E'(ruby 1.9.2p290,Rails 3.0.9)?

时间:2011-09-07 03:46:09

标签: ruby-on-rails ruby ruby-on-rails-3 unit-testing rake

当我以前运行'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)为什么我看到任何节目输出?

1 个答案:

答案 0 :(得分:2)

Grep for “puts”或在您的应用或测试代码中写入 stdout 的其他代码。有些东西正在向stdout泄露数据。

看起来您的视图模板正在将内容发送到stdout以及视图:

    <%= p str %>

p函数将字符串发送到stdout然后返回字符串。 &lt;%= ERB指令将值注入正在呈现的页面中,因此您将它打印到stdout / console并在页面中呈现它。这导致它在运行测试时出现在控制台上。