Ruby on rails Rails 3.1,RSpec-失败,但页面加载正常

Ruby on rails Rails 3.1,RSpec-失败,但页面加载正常,ruby-on-rails,ruby-on-rails-3,rspec,Ruby On Rails,Ruby On Rails 3,Rspec,我正在编写一些规范,下面的失败,但是页面/菜单/1在浏览器中加载良好。这是php应用程序的一个端口,也是我第一次使用RSpec。任何关于它为什么不起作用的想法 错误是: 1) MenusController GET 'show' should be succesful Failure/Error: get :show, :id => 1 ActiveRecord::RecordNotFound: Couldn't find MenuHeader with id=1 # ./

我正在编写一些规范,下面的失败,但是页面/菜单/1在浏览器中加载良好。这是php应用程序的一个端口,也是我第一次使用RSpec。任何关于它为什么不起作用的想法

错误是:

1) MenusController GET 'show' should be succesful
  Failure/Error: get :show, :id => 1
  ActiveRecord::RecordNotFound:
  Couldn't find MenuHeader with id=1
  # ./app/controllers/menus_controller.rb:18:in `show'
  # ./spec/controllers/menus_controller_spec.rb:7:in `block (3 levels) in <top (required)>'
这是菜单_controller.rb

def show
  @menu_header_data=MenuHeader.find(params[:id])


  respond_to do |format|
    format.html # show.html.erb
    # format.json { render json: @menu } to do
  end
end

thx

当使用Rspec或TestUnit测试控制器时,我将使用工厂或夹具通过id,而不是使用数据建立测试数据库。最好使用以下方法进行测试:

使用(我的建议,但每个人都有自己的品味):


该测试主要是为了确保控制器在提供有效数据时能够正确响应,并且使用工厂或固定装置的脆弱性要小得多。如果测试套件是基于固定装置或db备份之类的硬数据,那么维护测试套件将是一件痛苦的事情,这可能最终导致您放弃测试驱动开发,而不是接受它。

当使用Rspec或TestUnit测试控制器时,我会使用工厂或夹具通过id,而不是使用数据建立测试数据库。最好使用以下方法进行测试:

使用(我的建议,但每个人都有自己的品味):


该测试主要是为了确保控制器在提供有效数据时能够正确响应,并且使用工厂或固定装置的脆弱性要小得多。如果您的测试套件是基于固定装置或db备份等硬数据的,那么维护它将成为一件痛苦的事情,这可能最终导致您放弃测试驱动开发,而不是接受它。

旁白:您是否有“get show with Not Existence id应失败”的测试?您是否针对测试数据库运行此测试?您使用的是固定装置还是工厂?针对测试数据库运行,其中包含数据。您是否可以发布
应用程序/控制器/菜单\u控制器的代码。rb:18
rake db:test:prepare
,并确认数据确实存在于测试环境的控制台中。旁白:您是否有“如果id不存在,则获取显示失败”的测试?您是否对测试数据库运行此操作?您使用的是设备还是工厂?针对测试数据库运行,其中包含数据。您可以发布
app/controllers/menus\u controller.rb:18
rake db:test:prepare
的代码,并确认数据确实存在于测试环境的控制台中。
Factory.define:menu do | menu | menu.name“我的菜单名”menu.id 1 end
Factory.define:menu do | menu | menu.name“我的菜单名”menu.id 1 end
def show
  @menu_header_data=MenuHeader.find(params[:id])


  respond_to do |format|
    format.html # show.html.erb
    # format.json { render json: @menu } to do
  end
end
describe MenusController do
  describe "GET 'show'" do
     it "should be succesful" do
       get :show, :id => Factory(:menu).id
       response.should be_success
     end
  end
end