Как я могу реорганизовать тестовый код для запросов и ответов JavaScript и HTML? - PullRequest
0 голосов
/ 01 октября 2011

Я использую Ruby on Rails 3.1.0 и гем rspec-rails 2.Поскольку мне приходится тестировать запросы HTML и JavaScript на одно и то же действие контроллера, и, поскольку иногда они реагируют на визуализацию различных файлов или поведение по-разному , я хотел бы провести рефакторинг некоторого кода.1006 *

Как правило, , в моем файле контроллера у меня есть:

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

В настоящее время для тестирования как JS, так и HTML-запросов \ ответов в моем файле спецификации Iесть два разных примера (по одному примеру для каждого случая):

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 Ответ

2 голосов
/ 01 октября 2011

Вы можете использовать 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

Надеюсь, это поможет.

...