rails敏捷开发《3》新.docVIP

  • 0
  • 0
  • 约7.29万字
  • 约 58页
  • 2018-12-16 发布于湖北
  • 举报
rails敏捷开发《3》新

14.4 应用程序的集成测试 Integration Testing of Applications 下一个层面的测试是要验证应用程序的工作流程。在某种意义上,这就是在测试客户交给我们的用户故事——我们正是根据这些故事来开发应用程序的。譬如说,有这样一个故事:“用户进入商店首页。用户选择一件货品,将其放入购物车。用户结账,在表单中填入详细信息。用户提交表单之后,数据库中创建一份订单,其中包含用户详细信息,以及与购物车中所有货品对应的订单项。” 这正是集成测试的理想材料。集成测试需要模拟一个或多个虚拟用户与应用程序之间的一组连续的会话,你可以在其中发送请求、监控应答、跟踪重定向,等等。 当创建模型,控制器的同时,Rails就会创建对应的单元测试/功能测试。集成测试却不是自动创建的,你需要自己动手来创建它们。 depot ruby script/generate integration_test user_stories exists test/integration/ create test/integration/user_stories_test.rb 可以看到,Rails自动地给测试文件的名称加上了_test后缀。 现在来看看这个生成的文件。 require #{File.dirname(__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/user_stories_test.rb LineItem.delete_all Order.delete_all ruby_book = products(:ruby_book) 我们先来搞定用户故事中的第一句话:“用户进入商店首页”。 depot_r/test/integration/user_stories_test.rb get /store/index assert_response :success assert_template index 这看上去跟功能测试差不多,最大的区别在于get方法:在功能测试中,我们只测试一个控制器,因此在调用get()方法时只须指定action而在集成测试中,我们会穿梭于整个应用程序,所以需要传入完整的(相对)URL路径,其中包括控制器和action。 故事中的第二句话是“用户选择一件货品,将其放入购物车”。我们的应用程序使用Ajax请求来将物品放入购物车,因此调用这个action时应该使用xml_http_request方法。该方法返回之后,我们再检查购物车中是否已经包含所请求的货品。 depot_r/test/integration/user_stories_test.rb xml_http_request /store/add_to_cart , :id = ruby_book.id assert_response :success cart = session[:cart] assert_equal 1, cart.items.size assert_equal ruby_book, cart.items[0].product 话锋一转,用户故事的第三句话说“用户结账……”。这很容易测试 depot_r/test/integration/user_stories_test.rb post /store/checkout assert_response :success assert_template checkout 此刻,用户需要在结账表单中填入详细信息。在他们提交表单之后,应用程序会创建一份订单,并将用户重定向到商店首页。我们先来测试HTT

文档评论(0)

1亿VIP精品文档

相关文档