zoukankan      html  css  js  c++  java
  • Ruby on rails开发从头来(windows)(二十三)功能测试的约定

    上篇随笔里测试了login_controller,我们使用了很多rails内建的断言和getput等方法来进行测试。这次来看看rails在功能测试方面的一些约定。

    1.       HTTP请求的方法(HTTP request method

    下面的方法用来模拟HTTP请求并得到一个回应(response

    get()

    put()

    post()

    delete()

    head()

    这五个函数每一个都有同样的四个参数,以get()为例:

    get(action, parameters = nil, session = nil, flash = nil)

    向指定的Action发出一个HTTP GET请求,并且设定Response,四个参数的含义分别为:

    actionHTTP请求所指定的某个控制器(controller)的一个Action

    Parameters:可选的Hash,作为request的参数。

    Session:可选的,SessionHash

    Flash:可选的,flashHash

    下面是例子:

    get :index

    get :add_to_cart, :id => @version_control_book.id

    get :add_to_cart, :id => @version_control_book.id,

    :session_key => 'session_value', :message => "Success!"

    2.       断言(assertion

    除了有Test:Unit提供的一些基本的断言(assertion),功能测试还可以在执行请求后使用一些自定义的断言。例如下面的:

    l         assert_response(type, message=nil)

    判断得到的HTTP响应是一个数字型的状态值或者下面列举的标记,这些标记覆盖了HTTP响应值,例如:redirect对应300-399

    :success

    :redirect

    :missing

    :error

    例子:

    assert_response :success

    assert_response 200

    l         assert_redirected_to(options = {}, message=nil)

    判断最后一个请求的Action是否被重定向到其他的controlleraction或页面,例如:

    assert_redirected_to :controller => 'login'

    assert_redirected_to :controller => 'login', :action => 'index'

    assert_redirected_to "http://my.host/index.html"

    l         assert_template(expected=nil, message=nil)

    判断一个请求是否使用了指定的template来描画(render

    例如:

    assert_template 'store/index'

    l         assert_tag(conditions)

    判断在一个响应的body内是否有符合指定条件的tag,条件的参数必须是下面的keys中的一个或多个。

    :tag,节点的类型                                          

    assert_tag :tag => 'html'

    :content,判断节点的content的值

    assert_tag :content => "Pragprog Books Online Store"

    :attributes,一组条件,用来判断节点的属性

    assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }

    :parent,一组条件,判断节点的父节点

    assert_tag :tag => "head", :parent => { :tag => "html" }

    :child,一组条件,判断当前节点的最近的一个直属的child

    assert_tag :tag => "html", :child => { :tag => "head" }

    :ancestor一组条件,判断当前节点的最近的一个祖先

    assert_tag :tag => "div", :ancestor => { :tag => "html" }

    :descendant一组条件,判断当前节点的最近的一个子孙

    assert_tag :tag => "html", :descendant => { :tag => "div" }

    :children,一组条件,判断节点的children的数量,使用下面的key中的任意一个或一组

      :count,一个数字或一个范围,指定要matchchildren的编号。

      :less_thanchildren的编号必须小于指定的数字。

      :greater_thanchildren的编号必须大于指定的数字。

      :only,当计算children的数量是使用的一组条件。

      例子:

    assert_tag :tag => "ul",:children => { :count => 1..3,:only => { :tag => "li" } }

    更多的断言参考:http://api.rubyonrails.com/classes/Test/Unit/Assertions.html.

    3.       变量

    当一个请求(request)被执行,可以依靠下面的变量来进行断言。

    l         assigns(key=nil)

    由最后一个action赋值的实例变量。

    assert_not_nil assigns["items"]

    assigns必须被指定一个字符串作为索引,但是上面的assert_not_nil assigns["items"]却不会起作用,因为items是一个关键字,可以使用一方法调用来代替:

    assert_not_nil assigns(:items)

    l         session

    session的一个hash对象:

    assert_equal 2, session[:cart].items

    l         flash

    session里存放的flashhash对象

    assert_equal "Danger!", flash[:notice]

    l         cookies

    用户使用的cookieshash对象。

    assert_equal "Fred", cookies[:name]

    l         redirect_to_url

    上一个action重定向的完整的url

    assert_equal "http://test.host/login", redirect_to_url

     

    OK,这次就到这里,下次继续会到controller的测试。
  • 相关阅读:
    Spring Cloud Bus 消息总线介绍
    工商银行分布式服务 C10K 场景解决方案
    关于写好文章的3个心法和5点技巧
    混合云K8s容器化应用弹性伸缩实战
    云原生下的灰度体系建设
    被解救的代码
    【2020-10-22】我是否一个真正靠谱的人
    【2020-10-21】以谦虚与忍耐去期待豁然与贯通
    【2020-10-20】压力也是一种感受,用心体会
    【2020-10-19】不断试错的过程
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/ruby_rails_study_23.html
Copyright © 2011-2022 走看看