나는 사용자가 대기열에 동영상을 추가하여 영화를 관람할 수 있도록 영화를 초연 할 때 알림을받을 수있는 Rails 3 앱을 개발하고 있습니다. 사용자가 자신의 대기열에 동영상을 추가 할 때, 그들이 포함 된 문서, adds
을 만들 수 있도록몽고이 내장 모델에 대한 컨트롤러 테스트를 만듭니다.
내가 Mongoid을 사용하고 있기 때문에, 나는 그것을 구성했다, 또한 1
하여Movie
모델에
add_counter
를 증가
이 동작이 모델 수준에서 작동하고 있음을 확인하는 데 필자의 사양을 전달할 수 있었지만 컨트롤러를 만들었으므로 지나가는 응답을 얻을 수없는 것 같습니다. 나는 해결책을 찾기 위해 사방을 찾고 있었고 심지어 잠자고 돌아와서도 내가 잘못하고있는 것을 알아 내지 못했습니다.
# 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
그리고 여기 내 모델입니다 : 여기
# 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
내 컨트롤러 : 여기
내 컨트롤러 사양입니다 마지막으로
# models/movie.rb
class Movie
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::MultiParameterAttributes
field :add_counter, :type => Integer, :default => 0
# models/user.rb
class User
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::MultiParameterAttributes
embeds_many :adds
def add_to_queue!(movie)
if already_added?(movie) == false
adds.create!(:movie_id => movie.id)
movie.add_counter += 1
end
end
def already_added?(movie)
adds.where(:movie_id => movie.id).exists?
end
# models/add.rb
class Add
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::MultiParameterAttributes
field :movie_id, :type => String
key :movie_id
embedded_in :user
, 여기 RSpec에의 피드백이 때 I 컨트롤러 테스트를 실행하십시오.
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)>'
감사합니다. 나는이 변화를 만들었고 꽤 많은 일들이 일어 났지만 컨트롤러 테스트는 여전히 어떤 이유로 작동하지 않습니다. 그 이유에 대한 어떤 생각? –
잘 모르겠지만 몽고 계인에게 물어볼 가치가있을 것 같습니까? –
좋은 소리 - 문제가 더 커질 수있는 것처럼 들리므로 그동안 답변을 수락합니다. –