Rspec笔记

来源:互联网 发布:python微信开发框架 编辑:程序博客网 时间:2024/05/21 18:36
  1.   当我们有这样的需求:一个或者更多的类 拥有同样的行为, 那么可以使用Rspec的 可分享的实例组(a shared example group). 关键词是
    shared_examples_for 和  it_should_behave_like
    shared_examples_for "Any Pizza" doit "should taste really good" do@pizza.should taste_really_goodendit "should be available by the slice" do@pizza.should be_available_by_the_sliceendend

    describe "New York style thin crust pizza" doit_should_behave_like "Any Pizza"before(:each) do@pizza = Pizza.new(:region => 'New York' , :style => 'thin crust' )endit "should have a really great sauce" do@pizza.should have_a_really_great_sauceendend


    或者使用 share_as
    share_as :AnyPizza do...enddescribe "New York style thin crust pizza" doinclude AnyPizza...end

    或者直接使用 module ? 应该也可以

  2. 几种常见的断言
    lambda {account.withdraw 75, :dollars}.should raise_error(InsufficientFundsError)

    lambda {User.create!(:role => "admin" )}.should change{ User.admins.count }.from(0).to(1)


  3. 设置rspec rake 任务
    Spec::Rake::SpecTask.new do |t|t.spec_opts = ["--color" ]end
    现在一般的做法是直接设置配置文件
    .rspec
    --color



  4. 一些基本的断言语句
    http://www.letrails.cn/archives/11-02-advanced-rspec-tutorials-basics/
    下面是RSpec测试的一些基础语法,这些都是会运行通过的测试例:Strings:'foo'.should == 'foo''foo'.should === 'foo''foo'.should_not equal('foo')''.should be_empty'foo with bar'.should include('with')'http://fr.ivolo.us'.should match(/http:\/\/.+/i)nil.should be_nilNumbers:100.should < 200200.should >= 100(200 - 100).should == 100# (100 - 80) is less than 21100.should be_close(80,21)Arrays:[1,2,3].should have(3).items[].should be_empty[1,2,3].should include(2)Hashes:{}.should be_empty{:post => {:title => 'test'}}.should have_key(:post){:post => {:title => 'test'}}.should_not have_key(:title)false.should be_falsetrue.should be_trueRecords:# assuming @post = Post.new(:title => 'test')@post.should be_instance_of(Post)@post.should respond_to(:title)

  5. BDD 几篇特别好的文章分析
    http://www.taobaotesting.com/blogs/qa?bid=11663