2016-06-21 101 views
0

我是RSpec的新手,这个错误对我来说都是新的。一切似乎都是常规的,所以我似乎无法自己调试这个问题。错误:预期结果已被更改1,但被更改为0.我将发布我的代码以清晰起见。预期结果已经改变了1,但被改变了0

SUBSCRIBER FACTORY:

FactoryGirl.define do 
factory :subscriber do 
first_name "Tyler" 
last_name "Durden" 
email "[email protected]" 
phone_number "8765555" 
end 
end 

CONTROLLER:

class CommentsController < ApplicationController 
def new 
    @comment = Comment.new 
end 

def create 
    @subscriber = Subscriber.order('updated_at desc').first 
    @comment = @subscriber.comments.build(comments_params) 
if @comment.save 
    flash[:notice] = "Thank you!" 
    redirect_to subscribers_search_path(:comments) 
else 
    render "new" 
end 
end 

private 

def comments_params 
params.require(:comment).permit(:fav_drink, :subscriber_id) 
end 
end 

SPEC:

require "rails_helper" 

describe SubscribersController do 
include Devise::TestHelpers 

let(:user) { FactoryGirl.create(:user) } 
let(:subscriber) { FactoryGirl.attributes_for(:subscriber) } 

it "creates a new comment" do 
    sign_in(user) 
    comment = FactoryGirl.attributes_for(:comment) 

    expect { post :create, subscriber: subscriber, comment: comment }.to change{ Comment.count }.by(1) 
end 
end 

ERROR:

Failure/Error: expect { post :create, subscriber: subscriber, comment: comment }.to change{ Comment.count }.by(1) 
    expected result to have changed by 1, but was changed by 0 
# ./spec/controllers/comment_spec.rb:13:in `block (2 levels) in <top (required)>' 
+0

请提供你的助手和控制器的实际代码有问题 – Ilya

+0

我就可以很感谢你的帮助。 – Bitwise

+0

请问你'subscriber'工厂是什么样子?请问你'Comment'模型有什么瓦利dators? – spickermann

回答

2

在这里,你正在显示你的评论控制器,期待它的一个动作被击中。但是,您的测试案例实际上是调用订阅控制器的create路由。

在您的测试案例中,当您编写describe SubscribersController do时,您正在为该块中的HTTP请求建立范围

因此,当您拨打post :create, subscriber: subscriber, comment: comment, 时,它就是正被击中的订阅控制器。

在一般情况下,为了调试,您应该

  1. 检查的代码有问题的区域被称为
  2. 检查,价值观是正确的(在这里,这将意味着Comment.create对象保存成功。