Тестирование ошибок в Rails с моделью CouchRest с использованием RSpec

У меня есть обычный проект Rails (без Active Record), использующий CouchDB (couchrest_model) в качестве базы данных документов.

Я настроил RSpec и базовый скаффолд «Проект».

Когда я тестирую следующую спецификацию:

  before(:each) do
    @project = Project.create! valid_attributes
  end

  describe "GET index" do
    it "assigns all projects as @projects" do
      get :index
      assigns(:projects).should eq([@project])
    end
  end

Я получаю следующую ошибку:

Failure/Error: assigns(:projects).should eq([@project])

       expected [{"name"=>"test", 
                  "updated_at"=>2011-05-28 11:24:04 -0500,
                  "created_at"=>2011-05-28 11:24:04 -0500, 
                  "couchrest-type"=>"Project",
                  "_id"=>"709edbfaafb24fa1eff7d5f3966b2bda",
                  "_rev"=>"1-ae3f6356f8e32f6006337a4f3759bca4"}]
            got [{"name"=>"test",
                  "updated_at"=>2011-05-28 11:24:04 -0500, 
                  "created_at"=>2011-05-28 11:24:04 -0500,
                  "_id"=>"709edbfaafb24fa1eff7d5f3966b2bda",
                  "_rev"=>"1-ae3f6356f8e32f6006337a4f3759bca4",
                  "couchrest-type"=>"Project"}]

Кажется, единственная разница — это порядок элементов в хэше:

  (compared using ==)

   Diff:

   @@ -1,7 +1,7 @@
    [{"name"=>"test",
      "updated_at"=>2011-05-28 11:24:04 -0500,
      "created_at"=>2011-05-28 11:24:04 -0500,
   -  "couchrest-type"=>"Project",
      "_id"=>"709edbfaafb24fa1eff7d5f3966b2bda",
   -  "_rev"=>"1-ae3f6356f8e32f6006337a4f3759bca4"}]
   +  "_rev"=>"1-ae3f6356f8e32f6006337a4f3759bca4",
   +  "couchrest-type"=>"Project"}]

Я знаю, что «rspec» и «rspec-rails» работают «из коробки» только для Active Record, но это не должно так сильно отличаться для других ORM. Я что-то пропустил?

Как лучше всего исправить этот тест?


person Christian    schedule 28.05.2011    source источник


Ответы (1)


Пытаться:

assigns(:projects).should == [@project]
person Andy Waite    schedule 30.05.2011
comment
Вы используете Руби 1.9? Если да, то можете ли вы попробовать это в 1.8? - person Andy Waite; 30.05.2011
comment
Да, я использую рубин 1.9.2. Я пробовал с 1.8.7, и это не сработало, та же ошибка. Я также использую рельсы 3.0.7, rspec 2.6.0, rspec-rails 2.6.1. Я думаю, что это проблема с «назначениями» RSpec. - person Christian; 31.05.2011
comment
Можете ли вы проверить класс каждого объекта, т.е. ставит assigns(:projects).first.class; помещает @project.class - person Andy Waite; 31.05.2011
comment
Оба класса одинаковы: Project... но порядок элементов отличается при их проверке... - person Christian; 31.05.2011
comment
В конце концов, это была ошибка с моделью CouchRest, которая была недавно исправлена. github.com/couchrest/couchrest_model/issues/82 Во всяком случае, ваш ответ привел меня к проверьте подробнее RSpec. - person Christian; 29.06.2011