2013-06-04 18 views
0

當我在我的規範中添加了測試時,我對每一個通過寫入的測試都懷疑,所以我添加了一些語法錯誤到代碼中。事實證明,Rspec沒有運行我最近的測試,所以語法錯誤沒有得到迴應。在下面的代碼中的註釋顯示在該Rspec的停止顯示用於測試綠色期或紅色F中的任意行:帶Guard和Spork的Rspec不會運行某些測試,也不會給出失敗的詳細錯誤語句

require 'spec_helper' 

describe Api::PagesController do 
    def valid_session 
    {} 
    end 

    describe "GET index" do 
    before :each do 
     @page = create(:page) 
    end 
    it "assigns all pages as @pages" do 
     get :index 
     assigns(:pages).should eq([@page]) 
    end 
    it "returns json" do 
     get :index, format: :json 
     expect(response.body).to have_content @page.to_json 
    end 
    end 

    describe "GET show" do 
    before :each do 
     @page = create(:page) 
    end 
    it "assigns the requested page as @page" do 
     get :show, {:id => @page.to_param}, valid_session 
     assigns(:page).should eq(@page) 
    end 

    it "returns json" do 
     get :show, {:id => @page.to_param}, valid_session, format: :json 
     expect(response.body).to have_content @page.to_json 
    end 
    end 

    describe "GET new" do 
    it "assigns a new page as @page" do 
     get :new, {}, valid_session 
     assigns(:page).should be_a_new(Page) 
    end 
    end 

    describe "GET edit" do 
    before :each do 
     @page = create(:page) 
    end 
    it "assigns the requested page as @page" do 
     get :edit, {:id => @page.to_param}, valid_session 
     assigns(:page).should eq(@page) 
    end 

    it "returns json" do 
     get :edit, {:id => @page.to_param}, valid_session, format: :json 
     expect(response.body).to have_content @page.to_json 
    end 
    end 

    describe "POST create" do 
    describe "with valid params" do 
     it "creates a new Page in the database" do 
     expect { 
      post :create, {page: attributes_for(:page)}, valid_session 
      }.to change(Page, :count).by(1) 
     end 

     it "assigns a newly created page as @page" do 
     post :create, {page: attributes_for(:page)}, valid_session 
     assigns(:page).should be_a(Page) 
     assigns(:page).should be_persisted 
     end 

     #################### TESTS BELOW HERE ARE NOT SHOWN BY RSPEC########## 

     it "returns json" do 
     expect{ 
      post :create, {page: attributes_for(:page)}, valid_session 
      }.to have_content page.to_json 
     end 
    end 
    describe "with invalid params" do 
     it "does not save the new page in the database" do 
     expect { 
      post :create, {page: attributes_for(:page_invalid)}, valid_session 
      }.to_not change(Page, :count).by(1) 
     end 

     #FUTURE TEST - redirects to new page with errors 
    end 
    end 

    describe "PUT update" do 
    before :each do 
     @page = create(:page) 
    end 
    describe "with valid params" do 
     it "updates the requested page" do 
     Page.any_instance.should_receive(:update_attributes).with({ "title" => "MyString" }) 
     put :update, {:id => @page.to_param, :page => { "title" => "MyString" }}, valid_session 
     end 

     it "assigns the requested page as @page" do 
     put :update, {:id => @page.to_param, :page => { "title" => "MyString" }}, valid_session 
     assigns(:page).should eq(@page) 
     end 

     it "returns json" do 
     put :update, {:id => @page.to_param, :page => { "title" => "MyString" }}, valid_session, format: :jason 
     expect(response.body).to have_content @page.to_json 
     end 

    end 

    describe "with invalid params" do 
     it "assigns the page as @page" do 
     # Trigger the behavior that occurs when invalid params are submitted 
     Page.any_instance.stub(:save).and_return(false) 
     put :update, {:id => @page.to_param, page: attributes_for(:page_invalid)}, valid_session 
     assigns(:page).should eq(@page) 
     end 

     #FUTURE TEST - redirects to edit 
    end 
    end 

    describe "DELETE destroy" do 
    before :each do 
     @page = create(:page) 
    end 
    it "destroys the requested page" do 
     expect { 
     delete :destroy, {:id => @page.to_param}, valid_session 
     }.to change(Page, :count).by(-1) 
    end 
    end 

    describe "GET published" do 
    before :each do 
     @page = create(:page) 
     @page_unpublished = create(:page_unpublished) 
    end 
    it "returns a list of published pages only" do 
     get :published, format: :json 
     assigns(:pages).should eq([@page]) 
     expect(response.body).to have_content @page_unpublished.to_json 
    end 
    end 

    describe "GET unpublished" do 
    before :each do 
     @page = create(:page) 
     @page_unpublished = create(:page_unpublished) 
    end 
    it "returns a list of unpublished pages only" do 
     get :unpublished, format: :json 
     assigns(:pages).should eq([@page_unpublished]) 
     expect(response.body).to have_content @page_unpublished.to_json 
    end 
    end 

    describe "GET total_words" do 
    before :each do 
     @page = create(:page) 
    end 
    it "returns a list of unpublished pages only" do 
     get :total_words, {:id => @page.to_param}, format: :json 
     assigns(:total_words).should eq([@page_unpublished]) 
     expect(response.body).to have_content @page_unpublished.to_json 
    end 
    end 
end 

當我有意添加的語法錯誤,前面的測試中,我看到紅色Fs的,而不是綠色的點,但沒有錯誤報道。早些時候,當有一個錯誤,我會看到(例如):

16:10:14 - INFO - Running: spec/models/page_spec.rb 
Running tests with args ["--drb", "-f", "progress", "-r", "/Users/user/.rvm/gems/ruby-1.9.3-p194/gems/guard-rspec-1.2.1/lib/guard/rspec/formatters/notification_rspec.rb", "-f", "Guard::RSpec::Formatter::NotificationRSpec", "--out", "/dev/null", "--failure-exit-code", "2", "spec/models/page_spec.rb"]... 
.......F 

Failures: 

    1) Page Publishing returns unpublished pages 
    Failure/Error: expect(Page.unpublished).to eq [page_unpublished] 
    NameError: 
     undefined local variable or method `page_unpublished' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_4:0x0000010355b8c0> 
    # ./spec/models/page_spec.rb:58:in `block (3 levels) in <top (required)>' 

Finished in 0.54212 seconds 
8 examples, 1 failure 

Failed examples: 

rspec ./spec/models/page_spec.rb:57 # Page Publishing returns unpublished pages 

Done. 

現在,當一個測試失敗,我只看到:

17:55:26 - INFO - Running: spec/controllers/pages_controller_spec.rb 
Running tests with args ["--drb", "-f", "progress", "-r", "/Users/user/.rvm/gems/ruby-1.9.3-p194/gems/guard-rspec-1.2.1/lib/guard/rspec/formatters/notification_rspec.rb", "-f", "Guard::RSpec::Formatter::NotificationRSpec", "--out", "/dev/null", "--failure-exit-code", "2", "spec/controllers/pages_controller_spec.rb"]... 
.....FF..Done. 

這種變化發生在一個漂亮的任意時間在編碼時,我沒有修改Guardfile或任何Spork配置細節。任何想法爲什麼發生這種情況?

回答

0

它看起來像rspec的其中一個參數是--out/dev/null。所以你的輸出是從STDOUT重定向的。

一種可能性是這是由一個或多個不良測試引起的。你有沒有試過評論各種測試,看看你是否可以隔離有問題的測試?如果你按順序運行你的測試,我會在rspec過早退出的前後開始。

+0

是的,但是當rspec給我正確的答案時設置了這個標誌。但是,我怎麼能改變國旗呢? –

+0

糟糕,我的壞。我只注意到你有另一種格式選項。 --out僅適用於最後一種格式選項,即NotificationRSpec。所以不是這樣。 –

+0

無論如何,您是否嘗試過退出警衛並重新運行rspec以查看是否可以重複該問題?如果這一點被解決,你可能只需重新啓動spork和guard來重新加載環境中的變化。 –

相關問題