(Rspec)预计#count已经改变了1,但改为0

时间:2016-12-20 04:30:48

标签: ruby-on-rails-5 rspec-rails

我前一天开始学习Rspec。为我的articles控制器编写测试时,我在创建新文章时遇到错误。这是我的控制器:

def create
    Article.transaction do
      begin
        @article = Article.new(article_params)
        respond_to do |format|
          if @article.save
            view_context.create_sitemap
            flash[:show_alert] = true
            format.html { redirect_to edit_admin_article_path(@article), notice: 'Created sucessfull' }
          else
            format.html { render :new }
            format.json { render json: @article.errors,notice: "Unprocessable entity" }#may need a helper to handle exception
          end
        end
      rescue Exception => e
        raise ActiveRecord::Rollback
        respond_to do |format|
          flash[:show_alert] = true
          format.html { redirect_to new_admin_article_path, notice: 'Create failed'}
        end
      end
    end
  end

这是我的测试:

describe "POST #create" do 
    context "with valid attributes" do 
      it "creates a new article" do
        expect{
          post :create, params: { article: FactoryGirl.attributes_for(:article) }
        }.to change(Article, :count).by(1)
      end
      it "redirects to the index page" do
        post :create, params: { article: FactoryGirl.attributes_for(:article) }
        expect(response).to redirect_to admin_articles_path
      end
    end

    context "with invalid attributes" do
      it "does not save the new article" do 
        expect{
          post :create, params: { article: FactoryGirl.attributes_for(:article) }
        }.to_not change(Article, :count).by(1)
      end
      it "re-renders the :new template" do
        post :create, params: { article: FactoryGirl.attributes_for(:article) }
        expect(response).to render_template :new
      end
    end
  end

这是日志:

3) Admin::ArticlesController POST #create with valid attributes creates a new article
     Failure/Error:
       expect{
         post :create, params: { article: FactoryGirl.attributes_for(:article) }
       }.to change(Article, :count).by(1)

       expected #count to have changed by 1, but was changed by 0
     # ./spec/controllers/admin/articles_controller_spec.rb:29:in `block (4 levels) in <top (required)>'

我花时间搜索同样的问题但是,所有这些都没有解决我的错误。我的问题是我无法找出错误的来源。任何帮助表示赞赏。

0 个答案:

没有答案