Ruby on rails 3 RSpec和奇怪的测试结果

Ruby on rails 3 RSpec和奇怪的测试结果,ruby-on-rails-3,testing,rspec,rspec2,Ruby On Rails 3,Testing,Rspec,Rspec2,我正在尝试制作一个简单的应用程序。当我在浏览器中测试它时,一切正常。然而,当我尝试使用RSpec(2.5)运行一些测试时,它在以下方面失败:为控制器创建测试 以下是我的创建方法: def create @website = Website.new(params[:website]) if @website.save flash[:notice] = "Website created." redirect_to(:action => 'list') else ren

我正在尝试制作一个简单的应用程序。当我在浏览器中测试它时,一切正常。然而,当我尝试使用RSpec(2.5)运行一些测试时,它在以下方面失败:为控制器创建测试

以下是我的创建方法:

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

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

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")
      end
    end
  .
  .
  .
此测试的结果:

  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
第二个问题是。。。 有一段时间我得到了这样的测试结果:

<html><body>You are being <a href="http://test.host/websites/list">redire cted</a>.</body></html>
您正在被删除。
。。。这导致我把头发拔了一段时间,直到我做了什么(我真的不知道是什么),然后它就消失了。然而,当我想到它会在未来毁掉我的幸福时,我却害怕得要命


如果您对此有任何想法,我们将不胜感激。

很难知道这里要问的是什么,但我相信问题在于您没有为成功/失败设定条件。如果我理解正确,当您传入一个空白的
:adres
属性时,保存应该失败,页面应该呈现
列表
操作。因此,您希望存根
create
方法,并根据预期结果返回true或false:

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
应在模型规范中对参数的有效性进行测试:

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