Wie man den rspec Put-Controller-Test von Scaffold abschließt

Ich bin mit Gerüst zu generieren rspec-controller-tests. Standardmäßig schafft es der test:

  let(:valid_attributes) {
    skip("Add a hash of attributes valid for your model")
  }

  describe "PUT update" do
    describe "with valid params" do
      let(:new_attributes) {
        skip("Add a hash of attributes valid for your model")
      }

      it "updates the requested doctor" do
        company = Company.create! valid_attributes
        put :update, {:id => company.to_param, :company => new_attributes}, valid_session
        company.reload
        skip("Add assertions for updated state")
      end

Mit FactoryGirl, ich habe diese gefüllt mit:

  let(:valid_attributes) { FactoryGirl.build(:company).attributes.symbolize_keys }

  describe "PUT update" do
    describe "with valid params" do
      let(:new_attributes) { FactoryGirl.build(:company, name: 'New Name').attributes.symbolize_keys }

      it "updates the requested company", focus: true do
        company = Company.create! valid_attributes
        put :update, {:id => company.to_param, :company => new_attributes}, valid_session
        company.reload
        expect(assigns(:company).attributes.symbolize_keys[:name]).to eq(new_attributes[:name])

Dies funktioniert, aber es scheint, wie ich sollte in der Lage sein, alle zu testen Attribute, anstatt nur zu testen, wird der geänderte name. Ich habe versucht, die änderung der letzten Zeile:

class Hash
  def delete_mutable_attributes
    self.delete_if { |k, v| %w[id created_at updated_at].member?(k) }
  end
end

  expect(assigns(:company).attributes.delete_mutable_attributes.symbolize_keys).to eq(new_attributes)

Dass fast geklappt, aber ich bekomme die folgende Fehlermeldung von rspec mit BigDecimal Felder:

   -:latitude => #<BigDecimal:7fe376b430c8,'0.8137713195 830835E2',27(27)>,
   -:longitude => #<BigDecimal:7fe376b43078,'-0.1270954650 1027958E3',27(27)>,
   +:latitude => #<BigDecimal:7fe3767eadb8,'0.8137713195 830835E2',27(27)>,
   +:longitude => #<BigDecimal:7fe3767ead40,'-0.1270954650 1027958E3',27(27)>,

Verwendung von rspec, factory_girl, und das Baugerüst ist unglaublich Häufig, so meine Fragen sind:

Was ist ein gutes Beispiel für eine rspec und factory_girl test für eine PUT-update mit Gültiger params?
Ist es erforderlich, dass attributes.symbolize_keys und zum löschen der veränderlichen lösen? Wie bekomme ich diese BigDecimal-Objekte zu bewerten, wie eq?

InformationsquelleAutor der Frage dankohn | 2014-07-10

Schreibe einen Kommentar