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
  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/ToDoToTry/p/2129616.html
Copyright © 2011-2022 走看看