Ruby on rails开发从头来(windows)(二十五)-测试Controller

这次我们继续测试Controller,还是Store_controller。

1.先来测试测试CheckOut功能,给store_controller_test.rb添加代码:

def test_checkout
test_add_to_cart
get :checkout
assert_response :success
assert_not_nil assigns(:order)
assert_template "store/checkout"
end

注意这里调用了另一个test方法test_add_to_cart,因为如果购物车为空的话,我们将无法转到预想的checkout页面去,所以我们必须让购物车(cart)里至少有一件商品(item)。所以我们没有写重复代码,而是调用了test_add_to_cart方法来使购物车中有商品。

2.再来测试保存订单功能,我们通过save_order的Action来将保存order,我们的办法就是:cart将items存放到order的model里,然后由order保存到数据库,然后将cart置空,再重新定位到购物的store页面,并且显示一个友好的消息。现在在store_controller_test.rb添加代码:

def test_save_invalid_order
test_add_to_cart
post :save_order, :order => {:name => 'fred', :email => nil}
assert_response :success
assert_template "store/checkout"
assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }
assert_equal 1, session[:cart].items.size
end

上面是先测试无效的order,我们通过给save_order的Action一个无效的order,当无效的order被提交的时候,我们使用assert_tag来检查响应的div节点的是否是fieldWithErrors类型。

3.下面我们再来测试一个有效的order的保存。

def test_save_valid_order
test_add_to_cart
assert_equal 1, session[:cart].items.size
assert_equal 1, Order.count
post :save_order, :order => @valid_order_for_fred.attributes
assert_redirected_to :action => 'index'
assert_equal "Thank you for your order.", flash[:notice]
follow_redirect
assert_template "store/index"
assert_equal 0, session[:cart].items.size
assert_equal 2, Order.find_all.size
end

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索测试
, 购物车
, checkout
, order
CART
ruby on rails、ruby on rails 教程、ruby on rails pdf、ruby on rails 5 教程、ruby on rails是什么,以便于您获取更多的相关知识。

时间: 2024-08-26 12:30:14

Ruby on rails开发从头来(windows)(二十五)-测试Controller的相关文章

Ruby on rails开发从头来(四十五)- ActiveRecord基础(读取记录)

读取记录包括指定那些特定的数据是你感兴趣的,你给Active Record指定标准,Active Record再返回给你一些对象,其中包含了符合条件的记录的数据. 在一个表中检索数据的最简单的办法就是指定主键,任何一个Model都支持find()方法,该方法支持一个或多个主键值,如果只指定了一个主键,将会返回对应的对象,如果指定了多个主键给find方法,该方法一组相应的对象.注意,当没有任何符合条件的数据的时候,将会抛出一个RecordNotFound异常,所以如果find方法没有抛出这个异常的

Ruby on rails开发从头来(四十二)- ActiveRecord基础(主键和ID)

也许你已经注意到了,在我们前面的代码中,数据库定义里都使用了一个integer型的字段id作为主键,这是Active Record的一个约定. 或许你要问,为什么不用订单编号或者某个有意义的列来作为主键呢?使用id作为主键有一个很重要的原因,就是如果使用具有内在格式的主键的话,随着时间推移,有可能其中的规则也会变化.例如,使用ISBN号码来给book表做主键,毕竟ISBN号码是唯一的,但是,有可能当一本书写完后,美国的出版业已经发展了并且在所有的ISBN号码后又附加了一位数字. 如果我们使用了I

Ruby on rails开发从头来(四十)- ActiveRecord基础(Boolean属性)

一些数据库支持boolean类型,而另一些则不支持,这使得Active Record要抽象boolean类型变得困难.例如,如果数据库不支持boolean类型,有的开发者使用char(1)来替代,而内容使用"t"和"f"来表示true和false,而另外一些开发者使用integer类型,0是false,1是true.即使数据库支持boolean类型,在内部也许还是使用0和1来存储. 在Ruby里,在条件判断中,数字0和字符f都被认为是true值,这就意味着如果你直接

Ruby on rails开发从头来(四十九)- ActiveRecord基础(行数和再加载数据)

Active Record提供了两个方法来获取符合条件的记录的条数:count()和count_by_sql().例如: c1 = Order.count c2 = Order.count(["name = ?", "Dave Thomas"]) c3 = LineItem.count_by_sql("select count(*) " + " from line_items, orders " + " where

Ruby on rails开发从头来(四十八)- ActiveRecord基础(动态查询)

数据库上最常运行的查询莫过于根据指定条件返回符合的结果集,查询可能是返回所有名字为'dave'的订单,或者是某个博客上所有标题含Rails的post,在很多其他的框架和程序设计语言中,你需要创建sql来执行查询,Active Record利用了ruby语言所包含的动态能力来做这些事. 例如,我们的Order Model包含了诸如name,email,address这样的属性,我们可以使用这些名字对应的find方法来查询,例如: order = Order.find_by_name("Dave T

Ruby on rails开发从头来(四十六)- ActiveRecord基础(SQL和Active Record)

想象一下Active Record是如何处理SQL的,我们来看看find方法的:conditions参数,调用的时候像这样:find(:all,:conditions=>-),这里的:conditions参数决定了find方法将返回哪些记录,它相当于Sql语句的where部分,例如,要获取所有的名字为Dave,pay_type为po的订单,我们这样写: pos = Order.find(:all,:conditions => "name = 'dave' and pay_type =

Ruby on rails开发从头来(四十四)- ActiveRecord基础(创建记录)

Active Record使得实现CRUD的数据库基本操作变得简单,在下面的几节里我们使用Mysql数据库中的orders表来进行CRUD的操作,这次先看创建(Create). 我们假想有一个Model,名为Order: class Order < ActiveRecord::Base end 在面向对象的模型里,表对应类,表中的行对应类的对象.我们可以通过创建一个类的对象来创建一条记录.对orders表,我们可以使用Order.New()方法来创建一个Order的对象,也就对应了orders表

Ruby on rails开发从头来(三十八)- ActiveRecord基础(列和属性)

ActiveRecord中的一个对象相当于数据库中表的一行,对象的属性对应于表的列,也许你会注意到我们的Order类没有提及关于orders表的任何东西,这是因为ActiveRecord在运行时来确定这些对应关系,Active Record将数据库中的模式反应到类中. 我们的orders表可能使用下面的sql来创建: create table orders ( id int not null auto_increment, name varchar(100) not null, email va

Ruby on rails开发从头来(三十九)- ActiveRecord基础(访问属性)

如果在一个model对象中有一个名为balance的属性,你可以通过索引操作符来获取该属性的值,你可以使用一个字符串或者标记,在这里我们使用标记,例如: account[:balance] #=> 获取值 account[:balance] = 0.0 #=> 设置值 但是这种常见的代码是不提倡的,更好的是这样,利用ruby的访问方法: account.balance #=> 获取值 account.balance = 0.0 #=>设置值 在这里,我们使用了两种方法来获取属性的值

Ruby on rails开发从头来(windows)(三)-实现页面间的跳转

在上篇随笔Ruby on rails开发从头来(windows)(二)-创建项目和第一个Hello world 中,我们介绍了如何使用InstantRails创建一个项目和编写一个简单的Helloworld页面,今天在上次的基础上,写一个简单的页面跳转. 1.将appcontrollers目录下的say_controller.rb文件的内容改成下面这样: class SayController < ApplicationController def Hello @time = Time.now