«Ложный # to_hash должен вернуть Hash» - PullRequest
2 голосов
/ 25 января 2011

Приложение My Rails 3 имеет ресурс Product.

В моих спецификациях ProductsController сгенерированные тесты проверяют, что я перенаправляю на URL продукта после его обновления.

Следующие ошибки кода:

#inside ProductsController spec
def mock_product(stubs={})
  (@mock_product ||= mock_model(Product).as_null_object).tap do |product|
    product.stub(stubs) unless stubs.empty?
  end
end

it "should do something" do 
  product_url(mock_product)
end

Ошибка:

TypeError: RSpec::Mocks::Mock#to_hash should return Hash

1 Ответ

0 голосов
/ 25 января 2011

Мой mock_model определен как __null_object (что означает, что он ответит на все сообщения, кроме заглушенных, возвращая себя.

Итак, помощники по маршрутизации рельсов (например, product_url (product)) сначала преобразовывают продукт вхеш и использует продукт ['id'] для генерации маршрута.

Так как мой mock_product не заглушал to_hash, поведение "as_null_object" имело приоритет

irb > mock_product
=> #<Product:0x..fdb3b6176 @name="Product_1028">
irb > mock_product.to_hash
=> #<Product:0x..fdb3b6176 @name="Product_1028">

Мое решениебыла заглушка to_hash:

irb > mock_product(:to_hash => {:id => 1 }).to_hash
=> {:id=>1}

Должно ли это быть включено в модель mock_product по умолчанию?

...