rspec's следует_принимать на немодальном объекте? - PullRequest
2 голосов
/ 22 февраля 2011

Можно ли вызвать should_receive для немодального объекта?

Если это так, мне интересно, почему этот тест не проходит. SiteStyle has_many images и когда я вызываю duplicate! на сайте_стиле, я хочу, чтобы images также вызывал duplicate для себя. Тест не пройден. Фактические изображения дублируются, хотя. Почему это так?

Модель SiteStyle:

class SiteStyle < ActiveRecord::Base
  belongs_to :site
  belongs_to :user
  validates_presence_of :name, :user
  has_many :images, :as => :imageable, :order => "position", :dependent => :destroy

  ...

  def duplicate!(user, *args)
    options = args.extract_options!
    to_site ||= Site.find(options[:site_id])
    dup_style = self.class.create :site_id => to_site.id, :name => name, :user_id => user.id
    self.images.each { |image| image.duplicate!(dup_style) }
    dup_style
  end

  ...
end

SiteStyleSpec:

require 'spec_helper'

describe SiteStyle do
  ...

  describe "duplicate!(user, *args)" do
    before do
      @creator = User.make
      @site = Site.make
      @style = SiteStyle.make :site => @site, :user => @creator
    end

    ...

    it "should have a duplicate of the images" do
      @image = Image.make :imageable_type => @style.class.name, :imageable_id => @style.id
      @image.should_receive(:duplicate!).once
      @dup_style = @style.duplicate!(@creator)
    end
  end
end

Ошибка:

Failures:
  ...

  2) SiteStyle duplicate!(user, *args) should have a duplicate of the images
     Failure/Error: @image.should_receive(:duplicate!).once
     (#<Image:0xc7b40d8>).duplicate!(any args)
         expected: 1 time
         received: 0 times
     # ./spec/models/site_style_spec.rb:83

1 Ответ

4 голосов
/ 22 февраля 2011

Ваша строка здесь:

@image.should_receive(:duplicate!).once

Работает только с этим конкретным экземпляром @image, и вызывая should_receive только для него, чтобы ожидание не передавалось объектам изображения, используемым внутри метода дубликата (или любого другого места, где создается экземпляр изображения), даже если оно та же запись из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...