1 / 60
文档名称:

rails敏捷开发《3》.doc

格式:doc   大小:451KB   页数:60页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

rails敏捷开发《3》.doc

上传人:miaoshen1985 2018/10/14 文件大小:451 KB

下载得到文件列表

rails敏捷开发《3》.doc

相关文档

文档介绍

文档介绍:应用程序的集成测试
Integration Testing of Applications
下一个层面的测试是要验证应用程序的工作流程。在某种意义上,这就是在测试客户交给我们的用户故事——我们正是根据这些故事来开发应用程序的。譬如说,有这样一个故事:“用户进入商店首页。用户选择一件货品,将其放入购物车。用户结账,在表单中填入详细信息。用户提交表单之后,数据库中创建一份订单,其中包含用户详细信息,以及与购物车中所有货品对应的订单项。”
这正是集成测试的理想材料。集成测试需要模拟一个或多个虚拟用户与应用程序之间的一组连续的会话,你可以在其中发送请求、监控应答、跟踪重定向,等等。
当创建模型,控制器的同时,Rails就会创建对应的单元测试/功能测试。集成测试却不是自动创建的,你需要自己动手来创建它们。
depot> ruby script/generate integration_test user_stories
exists test/integration/
create test/integration/
可以看到,Rails自动地给测试文件的名称加上了_test后缀。
现在来看看这个生成的文件。
require "#{(__FILE__)}/../test_helper"
class UserStoriesTest < ActionController::IntegrationTest
# fixtures :your, :models
# Replace this with your real tests.
def test_truth
assert true
end
end
看起来有些像功能测试,不过测试类继承了IntegrationTest类。
下面就来动手编写针对上述故事的测试。由于在故事中要购买一些东西,所以需要用到products夹具,因此,我们在测试类的开始处就将其加载进来。
fixtures :products
跟单元测试和功能测试一样,这里的测试方法名也应该以test一开头。
def test_buying_a_product
# ...
end
当测试结束时,我们期望orders表中新增一份订单数据、line_items表中新增了一份订单项数据,因此在测试开始之前应首先将它们清除掉。另外,由于会经常使用ruby_book这项夹具数据,我们首先将它放入一个局部变量中。
depot_r/test/integration/


ruby_book = products(:ruby_book)
我们先来搞定用户故事中的第一句话:“用户进入商店首页”。
depot_r/test/integration/
get "/store/index"
assert_response :ess
assert_template "index"
这看上去跟功能测试差不多,最大的区别在于get方法:在功能测试中,我们只测试一个控制器,因此在调用get()方法时只须指定action而在集成测试中,我们会穿梭于整个应用程序,所以需要传入完整的(相对)URL路径,其中包括控制器和action。
故事中的第二句话是“用户选择一件货品,将其放入购物车”。我们的应用程序使用Ajax请求来将物品放入购物车,因此调用这个action时应该使用xml_http_request方法。该方法返回之后,我们再检查购物车中是否已经包含所请求的货品。
depot_r/test/integration/
xml_http_request "/store/add_to_cart" , :id =>
assert_response :ess
cart = session[:cart]
assert_equal 1,
assert_equal ruby_book, [0].product
话锋一转,用户故事的第三句话说“用户结账……”。这很容易测试
depot_r/test/integration/
post "/store/checkout"
assert_response :ess
assert_template "checkout"
此刻,用户需要在结账表单中填入详细信息。在他们