Вот мой код, я spec'ing:Научиться spec..seem, возникли проблемы
def vote_up
get_vote
@vote.value += 1 unless @vote.value == 1
@vote.save
respond_to do |format|
format.js { render :action => "vote", :layout => false }
end
end
Кажется довольно просто. Это то, что я пытаюсь чертежу его:
it "should vote up" do
@mock_cat = Factory.create(:category)
Category.stub(:mock_cat)
@mock_post = Factory.create(:post)
Post.stub(:current_post).and_return(@mock_post)
@vote = Factory(:vote)
get :vote_up, :id => @vote
@vote.reload.value.should == 1
end
Это возвращение этого:
undefined method `to_i' for #<Vote:0x1052a4af8>
Я не могу понять, почему же. Если бы я запустил свой mock_vote как (: vote), не пропустил бы он через метод контроллера и не прислал бы +1 к нему?
Update
Вот частный метод из моего posts_controller.rb
private
def get_vote
current_post = Post.all.detect{|r| r.id == params[:id].to_i}
@post = current_post
@vote = current_post.votes.find_by_user_id(current_user.id)
unless @vote
@vote = Vote.create(:user_id => current_user.id, :value => 0)
current_post.votes << @vote
end
end
Ответ:
it "should vote up" do
@mock_cat = Factory.create(:category)
Category.stub(:mock_cat)
@post = Factory(:post)
get :vote_up, :id => @post.id
@post.reload.vote_score.should == 1
end
Почему в мире вы делаете 'Post.all.detect' вместо of 'Post.find (params [: id])'? –
Также 'Category.stub (: mock_cat)' не делает то, что вы хотите. Фактически это создание метода класса в 'Category' под названием' mock_cat', который, очевидно, никогда не вызван. –
Я не могу обвинить ночь питья за метод Post.all.detect. Абсолютно верно, используя последнее. Во-вторых, мне нужно что-то создать, потому что пост не может существовать без категории. Поэтому я блокирую один, чтобы сделать содержание моделей. – Trip