开发者

RSpec and weird tests results

I'm trying to make a simple app. When Im testing it in browser everytyhing works just fine. Howerver, when I try to run some tests with RSpec (2.5) it fails when it comes to :create test for controller.

Here's my create method:

def create
 @website = Website.new(params[:website])
 if @website.save

   flash[:notice] = "Website created."
   redirect_to(:action => 'list')
 else
   render('new')
 end
end

The controller test:

describe WebsitesController do
  render_views
  .
  .
  .
  describe "POST 'create'" do
    before(:each) do
      @attr = { :adres => "www.excc.pl", :opis => "aaa "*22, :tagi => "aaa aaa aaa",
                :preview => File.new(Rails.root + 'spec/fixtures/rails.png'),
                :preview_mini => File.new(Rails.root + 'spec/fixtures/rails.png')}
    end
    describe "success" do
      it "should have the right title" do
        response.should have_selector("title", :content=>"Lista witryn w portfolio开发者_如何学Python")
      end
    end
  .
  .
  .

The result of this test:

  1) WebsitesController POST 'create' should have the right title
     Failure/Error: response.should have_selector("title", :content=>"Lista witryn    w portfolio")
     expected following output to contain a <title>Lista witryn w portfolio</title> tag:
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
     # ./spec/controllers/websites_controller_spec.rb:34:in `block (4 levels) in

websites_controller_spec.rb:34 refers to create method

However, this test is passed correctly (for incorrect data it should be redirected back to 'new' site with specified title):

it "should have the right title" do
    post :create, :website => @attr.merge(:adres => "")
    response.should have_selector("title", :content=>"Dodaj stronę WWW")
end

The second problem is... There was a time when I've got a test result like this:

<html><body>You are being <a href="http://test.host/websites/list">redire cted</a>.</body></html>

... which was causing me to pull my hair out for some time until I've done sth (I don't really know what) and it was gone. Yet, it makes me scared like hell when I think that it can come back in future an ruin my happiness.

Any thoughts on this would be greatly appreciated.


It's hard to know what is being asked here, but I believe the issue is that you are not setting the conditions for success/failure. If I understand correctly, when you pass in an blank :adres attribute, the save should fail and the page should render the list action. So you want to stub the create method and return true or false depending on the expected result:

it "succeeds" do
  @website = mock_model(Website,:save=>true)
  Website.stub(:new) { @website }
  post :create, :website => {}
  # redirects
  response.should have_selector("etc etc")
end


it "fails" do
  @website = mock_model(Website,:save=>false)
  Website.stub(:new) { @website }
  post :create, :website => {}
  # renders 'new'
  response.should_not have_selector("etc etc")
end

Testing of the validity of the parameters should be performed in the model spec:

@website = Website.new(:adres=>"")
@website.should_not be_valid
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜