0

我有一个有一些版本的游戏模型(has_many)。我选择使用嵌套资源来表达这一点。

resources :games do
  resources :releases, only: [:new, :create, :destroy]
 end

我正在尝试使用 RSpec 来测试我的发布控制器操作。这是我的测试文件的一部分。

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

当我没有设置 game_id 参数时,我有一个 No Routes Match 错误。当我添加时,:game_id => 1我有一个 RecordNotFound 错误。

所以我的问题是如何设置游戏对象来表达嵌套资源?

4

1 回答 1

0

我对 rspec 也很陌生——要温柔 :) 一旦你开始正确地测试你的应用程序,你的生活将会更快、更好、压力更小。您的应用程序将受益更多,您的客户也将受益。

大约一个月后,我直到需要设置页面样式时才使用浏览器。更快更高效。

就个人而言,我开始阅读本教程:

而且,与以往一样,以下 RailsCasts 提供了巨大帮助:

在你的情况下,尝试这样的事情(没有 FactoryGirl)。

describe "GET new" do
 it "assigns a new release as @release" do
   game = Game.create!( << INSERT VALID ATTRIBUTE >> )
   get :new, {:game_id => game.id}, valid_session
   assigns(:release).should be_a_new(Release)
 end
end

我认为是对的,没有测试过自己。还有其他一些方法可以做到这一点,包括将游戏创建方法设置为前置过滤器:

 before(:each) do
   @game = Game.create!( << INSERT VALID ATTRIBUTE >> )
 end

或者,就像我说的,使用 Factory Girl 为您构建模型。

这是我们的做法。

于 2012-12-13T15:09:58.453 回答