1 / 58
文档名称:

rails敏捷开发《3》 (2).doc

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

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

分享

预览

rails敏捷开发《3》 (2).doc

上传人:镜花水月 2019/6/16 文件大小:267 KB

下载得到文件列表

rails敏捷开发《3》 (2).doc

相关文档

文档介绍

文档介绍:。在某种意义上,这就是在测试客户交给我们的用户故事——我们正是根据这些故事来开发应用程序的。譬如说,有这样一个故事:“用户进入商店首页。用户选择一件货品,将其放入购物车。用户结账,在表单中填入详细信息。用户提交表单之后,数据库中创建一份订单,其中包含用户详细信息,以及与购物车中所有货品对应的订单项。”这正是集成测试的理想材料。集成测试需要模拟一个或多个虚拟用户与应用程序之间的一组连续的会话,你可以在其中发送请求、监控应答、跟踪重定向,等等。当创建模型,控制器的同时,Rails就会创建对应的单元测试/功能测试。集成测试却不是自动创建的,你需要自己动手来创建它们。depot>rubyscript/generateintegration_testuser_storiesexiststest/integration/createtest/integration/,Rails自动地给测试文件的名称加上了_test后缀。现在来看看这个生成的文件。require"#{(__FILE__)}/../test_helper"classUserStoriesTest<ActionController::IntegrationTest#fixtures:your,:models#,不过测试类继承了IntegrationTest类。下面就来动手编写针对上述故事的测试。由于在故事中要购买一些东西,所以需要用到products夹具,因此,我们在测试类的开始处就将其加载进来。fixtures:products跟单元测试和功能测试一样,这里的测试方法名也应该以test一开头。deftest_buying_a_product#...end当测试结束时,我们期望orders表中新增一份订单数据、line_items表中新增了一份订单项数据,因此在测试开始之前应首先将它们清除掉。另外,由于会经常使用ruby_book这项夹具数据,我们首先将它放入一个局部变量中。depot_r/test/integration/=products(:ruby_book)我们先来搞定用户故事中的第一句话:“用户进入商店首页”。depot_r/test/integration/"/store/index"assert_response:essassert_template"index"这看上去跟功能测试差不多,最大的区别在于get方法:在功能测试中,我们只测试一个控制器,因此在调用get()方法时只须指定action而在集成测试中,我们会穿梭于整个应用程序,所以需要传入完整的(相对)URL路径,其中包括控制器和action。故事中的第二句话是“用户选择一件货品,将其放入购物车”。我们的应用程序使用Ajax请求来将物品放入购物车,因此调用这个action时应该使用xml_http_request方法。该方法返回之后,我们再检查购物车中是否已经包含所请求的货品。depot_r/test/integration/"/store/add_to_cart",:id=>:esscart=session[:cart]assert_equal1,,[0].product话锋一转,用户故事的第三句话说“用户结账……”。这很容易测试depot_r/test/integration/"/store/checkout"assert_response:essassert_template"checkout"此刻,用户需要在结账表单中填入详细信息。在他们提交表单之后,应用程序会创建一份订单,并将用户重定向到商店首页。我们先来测试HTTP这边:将表单数据提交到save_orderaction,然后验证是否被重定向到首页,同时还要检查购物车是否为空。post_via_redirect辅助方法可以生成一个POST请求,然后跟随重定向,直到收到常规的200