水豚测试失败,AJAX响应 [英] Capybara test failing with AJAX response

查看:97
本文介绍了水豚测试失败,AJAX响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下Capybara测试,该测试应单击并更改评论的内容.问题在于,内容表单已加载到单击编辑"按钮时会弹出的模式中,而我的模式未在测试中呈现. (此功能在应用程序中有效). save_and_open_page打开仅包含json对象的页面.

I have the following Capybara test, which should click through and change the content of a comment. The issue is that the content form is loaded into a modal that pops up upon clicking the edit button, and my modal isn't being rendered in the test. (This functionality works in the app). save_and_open_page opens a page containing just the json object.

feature_spec.rb

feature_spec.rb

require 'spec_helper'

describe 'Edit comment' do

  let(:commented_post) { FactoryGirl.create(:post_with_comments) }

  describe "when current_user is the comment's author" do
    it 'should edit the comment content' do
      visit post_path(commented_post)
      within ("#comment-#{commented_post.comments.first.id}") do
        click_on "edit"
      end
      Capybara.default_wait_time = 15
      save_and_open_page
      fill_in 'comment_content', with: 'No, this is the best comment'
      click_on 'Edit Comment'
      expect(page).to have_content('No, this is the best comment')
    end
  end
end

post.js

var EditForm = {
  init: function() {
    $('.get-edit-comment').on('ajax:success', this.showEditModal);
  },

  showEditModal: function(e, data) {
    e.preventDefault();
    $('.reveal-modal').html(data.edit_template);
    $('.reveal-modal').foundation('reveal', 'open');
  }
}


$(document).ready( function() {
  EditForm.init();
});

comments_controller.rb

comments_controller.rb

  def edit
    @post = Post.find_by_id(params[:post_id])
    @comment = Comment.find_by_id(params[:id])
    render :json => { 
      edit_template: render_to_string(:partial => 'comments/form', 
                                      :locals => {post: @post, comment: @comment})
      }
  end

  def update
    Comment.find_by_id(params[:id]).update(comment_params)
    redirect_to post_path(params[:post_id])
  end

推荐答案

水豚测试需要将js:true选项传递到descrbe块中.

The capybara test needed to have the option js: true passed into the descrbe block.

这是结果:

  describe "when current_user is the comment's author", js: true do
    it 'should edit the comment content' do
      visit post_path(commented_post)
      within ("#comment-#{commented_post.comments.first.id}") do
        click_on "edit"
      end
      fill_in 'comment_content', with: 'No, this is the best comment'
      click_on 'Edit Comment'
      expect(page).to have_content('No, this is the best comment')
    end
  end

这篇关于水豚测试失败,AJAX响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆