Каково различие между насмешкой и mock_model в RSpec

Я нашел HotBits несколько лет назад - числа сгенерированы от радиоактивного распада, действительно случайный числа.

существуют пределы на то, сколько чисел можно загрузить день, но меня всегда развлекало использовать их как действительно, действительно случайные семена для RNG.

34
задан Rimian 10 February 2013 в 03:10
поделиться

2 ответа

Как сказал Дженгер, mock_model - это расширение, созданное для активной записи:

Это источник в 1.2.6:

     def mock_model(model_class, options_and_stubs = {})
        id = options_and_stubs[:id] || next_id
        options_and_stubs = options_and_stubs.reverse_merge({
          :id => id,
          :to_param => id.to_s,
          :new_record? => false,
          :errors => stub("errors", :count => 0)
        })
        m = mock("#{model_class.name}_#{id}", options_and_stubs)
        m.__send__(:__mock_proxy).instance_eval <<-CODE
          def @target.as_new_record
            self.stub!(:id).and_return nil
            self.stub!(:to_param).and_return nil
            self.stub!(:new_record?).and_return true
            self
          end
          def @target.is_a?(other)
            #{model_class}.ancestors.include?(other)
          end
          def @target.kind_of?(other)
            #{model_class}.ancestors.include?(other)
          end
          def @target.instance_of?(other)
            other == #{model_class}
          end
          def @target.class
            #{model_class}
          end
        CODE
        yield m if block_given?
        m
      end

Так что это довольно много, но оно

  • заглушает id со следующим в последовательности
  • заглушки to_param
  • заглушки new_record? with false
  • заглушает ошибки, поэтому считает, что ошибок нет

Он также расширяет экземпляр модели с помощью множества вещей.

33
ответ дан 27 November 2019 в 17:06
поделиться

От: Полезные помощники для фиксации RSpec

Во-первых, mock_model автоматически определяет уникальные идентификаторы для моделей, которые были созданы с его помощью. Во-вторых, это определяет методы to_param (возвращает строковое представление идентификатора) и new_record? (возвращает false).

9
ответ дан 27 November 2019 в 17:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: