- 當我們有這樣的需求:一個或者更多的類 擁有同樣的行爲, 那麼可以使用Rspec的 可分享的實例組(a shared example group). 關鍵詞是
shared_examples_for 和 it_should_behave_likeshared_examples_for "Any Pizza" do it "should taste really good" do @pizza.should taste_really_good end it "should be available by the slice" do @pizza.should be_available_by_the_slice end end
describe "New York style thin crust pizza" do it_should_behave_like "Any Pizza" before(:each) do @pizza = Pizza.new(:region => 'New York' , :style => 'thin crust' ) end it "should have a really great sauce" do @pizza.should have_a_really_great_sauce end end
或者使用 share_asshare_as :AnyPizza do ... end describe "New York style thin crust pizza" do include AnyPizza ... end
或者直接使用 module ? 應該也可以 - 幾種常見的斷言
lambda { account.withdraw 75, :dollars }.should raise_error(InsufficientFundsError)
lambda { User.create!(:role => "admin" ) }.should change{ User.admins.count }.from(0).to(1)
- 設置rspec rake 任務
現在一般的做法是直接設置配置文件Spec::Rake::SpecTask.new do |t| t.spec_opts = ["--color" ] end
.rspec--color
- 一些基本的斷言語句
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_nil Numbers: 100.should < 200 200.should >= 100 (200 - 100).should == 100 # (100 - 80) is less than 21 100.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_false true.should be_true Records: # assuming @post = Post.new(:title => 'test') @post.should be_instance_of(Post) @post.should respond_to(:title)
- BDD 幾篇特別好的文章分析
http://www.taobaotesting.com/blogs/qa?bid=11663
Rspec筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.