Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rspec测试ajax响应(应呈现部分响应)_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails rspec测试ajax响应(应呈现部分响应)

Ruby on rails rspec测试ajax响应(应呈现部分响应),ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我想测试我的控制器操作是否正在渲染部分 我到处找了找,似乎找不到任何有用的东西 创建操作: def create @project = Project.new... respond_to do |format| if @project.save format.js { render :partial => "projects/form" } end end end 规格: 更新查看下面的蓝鱼答案,这似乎是正确的答案 你会考虑使用你的集成测试吗?我发

我想测试我的控制器操作是否正在渲染部分

我到处找了找,似乎找不到任何有用的东西

创建操作:

def create
  @project = Project.new...
  respond_to do |format|
    if @project.save
      format.js { render :partial => "projects/form" }
    end
  end
end
规格:

更新查看下面的蓝鱼答案,这似乎是正确的答案

<>你会考虑使用你的集成测试吗?我发现单独使用rspec很难测试ajax。就你而言,我甚至不确定你是否会得到回复。在capybara中,它等待ajax调用完成,您可以调用page.has_xxxx查看它是否已更新。以下是一个例子:

it "should flash a successful message" do
    visit edit_gallery_path(@gallery)
    fill_in "gallery_name", :with => "testvalue"
    click_button("Update")
    page.has_selector?("div#flash", :text => "Gallery updated.")
    page.has_content?("Gallery updated")
    click_link "Sign out"
end

如果你在寻找一个真正的答案。。。(即完全在RSpec中,不使用Capybara),RSpec文档说明render_模板是assert_模板的包装器。assert_template()还表示可以通过包含:partial键来检查是否呈现了分部

试试看

it { should render_template(:partial => '_partialname') }

测试ajax控制器方法的另一个好方法是检查分配,这些分配稍后用于呈现结果。下面是一个小例子:

控制器

def do_something
  @awesome_result = Awesomeness.generete(params)
end
JBuilder

json.(@awesome_result, :foo, :bar)
Rspec控制器测试

describe :do_something do

  before do
    @valid_params{"foo" => "bar"}
  end

  it "should assign awesome result" do
    xhr :post, :do_something, @valid_params
    assigns['awesome_result'].should_not be_nil
  end

end

@蓝鱼,我认为你的答案是对的,但看起来他的回应是用js做的。这会不会让我们更上一层楼,或者我们需要增加额外的东西?我也有类似的困难,对我来说太好了。render_模板似乎通过了我输入的任何内容(尝试测试控制器的默认行为)
describe :do_something do

  before do
    @valid_params{"foo" => "bar"}
  end

  it "should assign awesome result" do
    xhr :post, :do_something, @valid_params
    assigns['awesome_result'].should_not be_nil
  end

end