ruby-on-rails - Rails 测试期间发生了什么?

标签 ruby-on-rails ruby unit-testing testing

我是 Ruby On Rails 的新手。我喜欢,它内置了测试功能。但是,我无法用测试来解决问题。这是我关于它的第一个基本问题。

测试期间到底发生了什么?

我了解开发,我们想要一些结果,我们使用我们拥有的数据或从用户那里获得的数据来实现我们想要的最终结果。但是,测试的概念有时让我感到困惑。我已经在浏览器中测试应用程序一段时间了,我们是否正在用代码复制相同的内容?测试是关于什么的?用自动化代码复制浏览器测试?在这里启发我。

最佳答案

阅读 A Guide to Testing Rails Applications将是一个很好的起点。

基本上,您有三种测试:单元功能集成

单元测试 正在测试您的模型。在这些测试中,您检查模型的单个方法是否按预期工作,例如您设置分配一个带空格的登录名,然后测试是否删除了空格:

class UserTest < ActiveSupport::TestCase
  def test_login_cleaning
    u = User.new
    u.login = "  login_with_spaces  "
    assert_equal "login_with_spaces", u.login
  end
  # ... and other tests
end

功能测试 正在测试您的 Controller (和 View )。在每个测试中,您模拟一个请求发送到一个具有给定参数集的 Controller ,然后您确保 Controller 返回正确的响应。

但请注意,在此测试中您无法测试页面的呈现,因此它并非严格模拟浏览器。要测试您的页面是否美观,您需要手动进行(我几乎可以肯定存在一些技术,但我不知道它们)

功能测试示例:

class UserControllerTest < ActionController::TestCase
  def test_show_renders_admin
    get :show, :id => 1
    assert_response :success
    assert_select "div.user" do
      assert_select "span.name", "Joe Admin"
    end
  end
  def test_show_handles_unknown_id
    get :show, :id => 9999
    assert_response 404
    assert_select "p.warning", "No such user"
  end
end

集成测试 正在测试一系列请求 - 类似于场景,其中用户登录、获取“创建用户”页面、创建用户等。这些测试检查单个请求(在功能测试中测试)是否能够协同工作。


我看到 Simone 已经指出了自动化在测试中的重要性,所以指向指南的链接是我回答中唯一的值(value);-)

您可能会发现应用 Test Driven Development 的一些规则非常有帮助,尤其是当您的项目稍微成熟时。

我知道通过编写测试开始项目并不容易,因为通常您还不知道一切将如何工作,但后来,当您发现错误时,我强烈建议< strong>从编写失败的测试用例开始修复所有错误。它确实非常有助于错误修复阶段,以及之后的阶段 - 确保错误不会再次出现。


嗯,我注意到我没有直接回答你的问题 ;-)

当您开始测试程序时,Rails:

  • 删除测试数据库(因此请确保您在此处没有任何有值(value)的数据),
  • 使用开发数据库的结构重新创建它(因此,请确保您已运行所有迁移),
  • 加载所有装置(来自 test/fixtures/*)
  • test/units/* 和其他目录加载所有测试类,
  • 调用名称以“test_”开头或由宏 test "should something.." 创建的每个方法(按字母顺序,但您可以认为顺序是随机的)
  • 在每次调用之前它都会执行一个特殊的setup过程,在每次调用之后它会执行teardown过程,
  • 在每次调用之前,它可能(取决于配置)重新创建您的数据库数据,再次加载固定装置。

您将在指南中找到更多信息。

关于ruby-on-rails - Rails 测试期间发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240743/

相关文章:

ruby-on-rails - 如何加快涉及图像上传/调整大小的 Rails 单元测试?

ruby-on-rails - 炼油厂图像未加载 - 蜻蜓错误

ruby-on-rails - 我应该如何将 rails 和 simple_form 用于嵌套资源?

ruby - 尝试保存大(ish)整数值时出现错误指示数字为 "out of range for ActiveRecord::Type::Integer with limit 4"

c# - AuthorizeAttribute 的 IsAuthorized 在单元测试中始终为 false

php - 在单元测试中模拟 PHP 函数

sql - 如何动态更新 Ruby on Rails 中的列

ruby-on-rails - Rails 跛脚过滤器?

ruby - 您如何创建预发布 gem ?

ruby - 在 mongodb 中存储文件系统树并作为 json 提供给 flex 应用程序