zoukankan      html  css  js  c++  java
  • rspec 安装、使用、入门

    INSTALL
    =======
    
    $ gem install rspec
    
    RSPEC-RAILS
    ===========
    
      RAILS-3
      =======
    
        CONFIGURE THE GEMFILE
        ======================
        group :development, :test do
          gem "rspec-rails", "~> 2.0"
        end
    
        INSTALL THE BUNDLE
        ===============================
        $ bundle install
    
        BOOTSTRAP THE APP
        ================= 
        $ ./script/rails generate rspec:install
              create  .rspec
              create  spec
              create  spec/spec_helper.rb
              create  autotest
              create  autotest/discover.rb
    
      RAILS-2
      =======
    
        INSTALL
        =======
        $ gem install rspec-rails -v 1.3.3
    
        BOOTSTRAP THE APP
        =================
        $ ./script/generate rspec
            create  spec
            create  spec/spec_helper.rb
            create  spec/spec.opts
            create  previous_failures.txt
            create  script/spec_server
            create  script/spec
    HOW TO USE
    ==========
    
      COMMAND LINE
      =============
    rspec --color --format doc spec/widget_spec.rb
    
      RAILS 3 (RSPEC 2)
      =============
    ./rails/generate model User
    rake -T spec # lists all rspec rake tasks
    rake spec # run all specs
    rake spec/models/mymodel_spec.rb # run a single spec file
    rake spec/models/mymodel_spec.rb:27 # run a single example or group on line 27
    
      RAILS 2 (RSPEC 1)
      =============
    ./script/generate rspec_model User
    rake -T spec # lists all rspec rake tasks
    rake spec # run all specs
    rake spec SPEC=spec/models/mymodel_spec.rb SPEC_OPTS="-e \"should do
    something\"" #run a single spec
    
    
    
    module UserSpecHelper
      def valid_user_attributes
        { :email => "joe@bloggs.com",
          :username => "joebloggs",
          :password => "abcdefg"}
      end
    end
    
    
    describe "A User (in general)" do
      include UserSpecHelper
    
      before(:each) do
        @user = User.new
      end
    
      it "should be invalid without a username" do
        pending "some other thing we depend on"
        @user.attributes = valid_user_attributes.except(:username)
        @user.should_not be_valid
        @user.should have(1).error_on(:username)
        @user.errors.on(:username).should == "is required"
        @user.username = "someusername"
        @user.should be_valid
      end
    end
    
    EXPECTATIONS
    =====================
    target.should satisfy {|arg| ...}
    target.should_not satisfy {|arg| ...}
    
    target.should equal <value>
    target.should not_equal <value>
    
    target.should be_close <value>, <tolerance>
    target.should_not be_close <value>, <tolerance>
    
    target.should be <value>
    target.should_not be <value>
    
    target.should predicate [optional args]
    target.should be_predicate [optional args]
    target.should_not predicate [optional args]
    target.should_not be_predicate [optional args]
    
    target.should be < 6
    target.should == 5
    target.should be_between(1, 10)
    target.should_not == 'Samantha'
    
    target.should match <regex>
    target.should_not match <regex>
    
    target.should be_an_instance_of <class>
    target.should_not be_an_instance_of <class>
    
    target.should be_a_kind_of <class>
    target.should_not be_a_kind_of <class>
    
    target.should respond_to <symbol>
    target.should_not respond_to <symbol>
    
    lambda {a_call}.should raise_error
    lambda {a_call}.should raise_error(<exception> [, message])
    lambda {a_call}.should_not raise_error
    lambda {a_call}.should_not raise_error(<exception> [, message])
    
    proc.should throw <symbol>
    proc.should_not throw <symbol>
    
    target.should include <object>
    target.should_not include <object>
    
    target.should have(<number>).things
    target.should have_at_least(<number>).things
    target.should have_at_most(<number>).things
    
    target.should have(<number>).errors_on(:field)
    
    expect { thing.approve! }.to change(thing, :status).
        from(Status::AWAITING_APPROVAL).
        to(Status::APPROVED)
    
    expect { thing.destroy }.to change(Thing, :count).by(-1)
    
    Mocks and Stubs
    ===============
    user_mock = mock "User"
    user_mock.should_receive(:authenticate).with("password").and_return(true)
    user_mock.should_receive(:coffee).exactly(3).times.and_return(:americano)
    user_mock.should_receive(:coffee).exactly(5).times.and_raise(NotEnoughCoffeeExcep
    ion)
    
    people_stub = mock "people"
    people_stub.stub!(:each).and_yield(mock_user)
    people_stub.stub!(:bad_method).and_raise(RuntimeError)
    
    user_stub = mock_model("User", :id => 23, :username => "pat", :email =>
    "pat@example.com")
    
    my_instance.stub!(:msg).and_return(value)
    MyClass.stub!(:msg).and_return(value)
    
    Examples (in the real world)
    
    ============================
    来源  http://cheat.errtheblog.com/s/rspec
    http://madhatted.com/2008/7/10/rspec-real-world-testing
    presentation: http://kerryb.github.com/iprug-rspec-presentation/#31
  • 相关阅读:
    Ubuntu Server 18.04上安装fail2ban
    Spring Security实现用户名密码登录
    Spring Boot集成H2数据库
    2019年过去了,我很怀念它
    基于Spring Boot的统一异常处理设计
    Git推送到多个远程仓库
    广州商学院16级软工一班&二班-助教总结
    记一次返工之后记
    广州商学院16级软工一班&二班-第四次作业成绩
    广州商学院16级软工一班&二班-第三次作业成绩
  • 原文地址:https://www.cnblogs.com/ToDoToTry/p/2129616.html
Copyright © 2011-2022 走看看