我是 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/