如何为JavaScript和HTML请求\响应重构测试代码?

时间:2011-09-30 22:46:32

标签: ruby-on-rails ruby ruby-on-rails-3 rspec rspec2

我正在使用Ruby on Rails 3.1.0和rspec-rails 2 gem。由于我必须测试同一个控制器操作的HTML和JavaScript请求,并且因为有时这些请求通过呈现不同的视图文件或以不同的方式执行 ,我想重构一些代码

一般,在我的控制器文件中我有:

def create
  ...
  respond_to
    format.html
    format.js
  end
end

目前,为了测试JS和HTML请求\响应,在我的spec文件中,我有两个不同的示例(每个案例都有一个例子):

context "POST create" do
  let(:user) { User.new }

  it "should correctly respond to a JS request" do
    xhr :post, :create
    ...
    session[:user].should be_nil
    flash[:notice].should be_nil
  end

  it "should correctly respond to a HTML request" do
    post :create
    ...
    session[:user].should be_nil
    flash[:notice].should be_nil
  end
end

我应该如何重构上述代码?

1 个答案:

答案 0 :(得分:2)

您可以使用shared_examples_for

context "POST create" do
  let(:user) { User.new }

  shared_examples_for "a succesfull request" do
    it("does not set the user")  { session[:user].should be_nil }
    it("does not set the flash") { flash[:notice].should be_nil }
  end

  context "with a js request" do
    before(:each) do
      xhr :post, :create
    end

    it_should_behave_like "a succesfull request"
  end

  context "with a HTML request" do
    before(:each) do
      post :create 
    end

    it_should_behave_like "a succesfull request"
  end
end

希望这有帮助。