Ruby on rails 为Mongoid嵌入式模型创建控制器测试
我正在开发一个Rails 3应用程序,它允许用户通过将电影添加到队列中来跟踪电影,以便在电影首映时通知他们 因为我使用的是Mongoid,所以我对它进行了结构化,这样当用户将电影添加到队列中时,他们会创建一个嵌入式文档,Ruby on rails 为Mongoid嵌入式模型创建控制器测试,ruby-on-rails,mongodb,rspec,mongoid,Ruby On Rails,Mongodb,Rspec,Mongoid,我正在开发一个Rails 3应用程序,它允许用户通过将电影添加到队列中来跟踪电影,以便在电影首映时通知他们 因为我使用的是Mongoid,所以我对它进行了结构化,这样当用户将电影添加到队列中时,他们会创建一个嵌入式文档,添加,并且他们还会将电影模型上的添加计数器增加1 我已经能够让我的规范通过,确认这种行为在模型级工作,但是现在我正在构建控制器,我似乎无法得到通过的响应。我一直在到处寻找解决方案,甚至在我睡了一觉之后,又回到了这个问题上,我仍然无法找出我做错了什么 这是我的控制器规格: # sp
添加
,并且他们还会将电影
模型上的添加计数器
增加1
我已经能够让我的规范通过,确认这种行为在模型级工作,但是现在我正在构建控制器,我似乎无法得到通过的响应。我一直在到处寻找解决方案,甚至在我睡了一觉之后,又回到了这个问题上,我仍然无法找出我做错了什么
这是我的控制器规格:
# spec/controllers/adds_controller_spec.rb
require 'spec_helper'
describe AddsController do
before(:each) do
@user = Factory(:user)
@movie = Factory(:movie)
end
describe '#create' do
context 'given valid params' do
before(:each) do
sign_in @user
end
it "creates a new add" do
add_count @user.adds.count
post :create, :movie_id => @movie.id
@user.adds.count.should == add_count + 1
end
end
end
end
这是我的控制器:
# controllers/adds_controller.rb
class AddsController < ApplicationController
before_filter :authenticate_user!
def create
@movie = Movie.find(params[:movie_id])
@user = current_user
@user.add_to_queue!(@movie)
respond_to do |format|
format.js
end
end
end
最后,以下是我运行控制器测试时Rspec的反馈:
Failures:
1) AddsController#create given valid params creates a new add
Failure/Error: @user.adds.count.should == 1
expected: 1
got: 0 (using ==)
# ./spec/controllers/adds_controller_spec.rb:25:in `block (4 levels) in <top (required)>'
故障:
1) AddsController#创建给定的有效参数创建新的add
失败/错误:@user.adds.count.should==1
预期:1
获取:0(使用==)
#./spec/controllers/adds_controller_spec.rb:25:in'block(4层)in'
此代码过于复杂。我会去掉Add类。添加的概念不应该由对象建模,而应该由关系建模
分为两类(简化):
movie.rb
class Movie
include Mongoid::Document
has_and_belongs_to_many :user_queues, :class_name => "User", :inverse_of => :movie_queue
end
class User
include Mongoid::Document
has_and_belongs_to_many :movie_queue, :class_name => "Movie", :inverse_of => :user_queues
end
user.rb
class Movie
include Mongoid::Document
has_and_belongs_to_many :user_queues, :class_name => "User", :inverse_of => :movie_queue
end
class User
include Mongoid::Document
has_and_belongs_to_many :movie_queue, :class_name => "Movie", :inverse_of => :user_queues
end
这里的语法可能不精确,但将它们视为数组,您将获得黄金。谢谢。我做了这个改变,它大大加快了速度,但由于某些原因,我的控制器测试仍然不起作用。有没有想过为什么会这样?不确定,也许值得问问mongoid的人?听起来不错-我会接受你的回答,因为听起来问题可能更大。好吧,很抱歉我帮不了你Sean。我对Mongoid的测试部分不太熟悉。