0

私は以下をテストしています:

  1. ユーザーが投稿 (新しいページ) を作成すると、表示ページにリダイレクトされます (投稿は「公開済み」として保存されます)。
  2. 彼は編集ページに移動し、 [下書きを保存] ボタンをクリックすると、ショー ページに再びリダイレクトされます。
  3. 彼は再び編集ページに移動し、次のようなものが表示されるはずです: <p>Status: <span>"Draft"</span></p>(以前は <p>Status: <span>"Published"</span></p>)

仕様:

describe "post status" do

  let!(:post) { FactoryGirl.create(:post, user:         user,
                                          title:        "Lorem",
                                          content:      "Lorem Ipsum",
                                          status:       "Published",
                                          #category_id:  category.id,
                                          tag_list:      "#{tag.id}") }
  before do
    sign_in user
    visit edit_post_path(post)
  end

  describe "edit page" do
    it { should have_selector('h1',   text: "Update post") }
    it { should have_selector('span', text: "Published") }
  end

  let(:save_draft) { "Save Draft" }
  let(:publish)    { "Publish" }

  describe "save as draft" do

    before do
      click_button save_draft
      visit edit_post_path(post)
    end

    it { should have_selector('h1',       text: "Update post") }
    it { should_not have_selector('span', text: "Published") }
    it { should have_selector('span',     text: "Draft") }
  end
end

<p class="status">
  <% if @post.status == "Draft" %>
    Status: <span class="label"><%= @post.status %></span>
  <% elsif @post.status == "Published" %>
    Status: <span class="label label-primary"><%= @post.status %></span>
  <% end %>
</p>

編集ページ:

<p class="status">
  <% if @post.status == "Draft" %>
    Status: <span class="label"><%= @post.status %></span>
  <% elsif @post.status == "Published" %>
    Status: <span class="label label-primary"><%= @post.status %></span>
  <% end %>
</p>

動作はライブ ページで機能しますが、仕様を実行するとテストが失敗します。

失敗:

1) 投稿ページにページの投稿ステータスが表示され、下書きとして保存されます/post_pages_spec.rb:211:in `ブロック (5 レベル) in '

2) 投稿ページにページの投稿ステータスが表示され、下書きとして保存されますrequests/post_pages_spec.rb:210:in `ブロック (5 レベル) in'

仕様では、タグ内に"Published"というテキストが見つかりますが、 "Draft"は見つかりません ( "Draft"が見つかるはずです)。span

クリック ボタンが間違ったタイミングでトリガーされていませんか? それを修正する方法は?

編集:

  def update
    @post = Post.find(params[:id])
    if @post.update_attributes(params[:post]) && params[:commit] == "Publish"
      @post.update_attributes(status: "Published")
      flash[:success] = "Post updated."
      redirect_to @post
    elsif @post.update_attributes(params[:post]) && params[:commit] == "Save Draft"
      @post.update_attributes(status: "Draft")
      flash[:success] = "Post draft updated."
      redirect_to @post
    else
      render 'edit'
    end
  end

  def create
    @post = current_user.posts.build(params[:post])
    if @post.save && params[:commit] == "Publish"
      @post.update_attributes(status: "Published")
      flash[:success] = "Post published."
      redirect_to @post
    elsif @post.save && params[:commit] == "Save Draft"
      @post.update_attributes(status: "Draft")
      flash[:success] = "Post saved as draft."
      redirect_to @post
    else
      render 'new'
    end
  end
4

2 に答える 2

1

これが問題になるとは思っていませんでした:

 tag_list:      "#{tag.id}") }

私はこれをしなければなりませんでした:

before do
 tag_list:      "#{tag.id}") }
  click_button save_draft
  visit edit_post_path(post)
end

タグはdata属性とともに追加されています。そのため、フォームは検証されず、'Published'属性は変更されませんでした。

于 2012-12-23T06:19:00.063 に答える