Как заставить огурец и маринованные огурцы работать с mongo_mapper, machinist и machinist_mongo? - PullRequest
2 голосов
/ 18 июля 2010

Я бы хотел, чтобы машинист , машинист_mongo , mongo_mapper , огурец и маринад , чтобы играть красивовместе.

В настоящее время у меня есть машинист со всеми настроенными чертежами, и я использую огурец для выполнения BDD.Все идет нормально.Моя проблема в том, что мне приходится писать собственные шаги по огурцу для всех моих чертежей машиниста.На самом деле это не проблема, так как это не останавливает меня, но как разработчик .NET, проверяющий рельсы, я чувствую себя действительно грязно, когда приходится писать шаг для каждого проекта, тогда как в .NET я, вероятно, мог бы использоватьрефлексия.

Можно ли каким-то образом получить встроенные в capture_model, capture_plural_factory и т. д. маринады для распознавания моих чертежей машиниста?

Я уверен, что у меня настроен и настроен машинистправильно, потому что когда я использую blueprintname.make, в пользовательском шаге огурца все работает правильно.

Версии драгоценных камней:
рельсы 2.3.8
огурец 0.8.3
огурец-рельсы 0.3.2
монго 1.0.5
mongo_mapper 0.8.2
рассол 0.3.0
машинист 1.0.6
машинист_монго 1.1.1


функции / поддержка / рассол.rb:
require 'pickle/world'
Pickle.configure do |config|
  config.adapters = [:machinist]
end

Я пытался использовать config.adapters = [:machinist, Machinist::MongoMapperAdapter], но я получаю сообщение об ошибке, в котором говорится, что не существует метода factories для Machinist::MongoMapperAdapter.

неопределенный метод `фабрики 'для машиниста:: MongoMapperAdapter: Class (NoMethodError) /usr/local/lib/ruby/gems/1.8/gems / pickle-0.3.0 / lib / pickle / config.rb: 25: в "фабриках"

features / support / machinist.rb:
require 'machinist'
require 'machinist/mongo_mapper'
require "#{Rails.root}/spec/blueprints"
require 'database_cleaner'
Before { Sham.reset } # reset Shams in between scenarios
spec / blueprints.rb (усечено для ясности)
require 'sham'
require 'faker'

Sham.code { Faker::Lorem.words 1 }

AccessCode.blueprint do
  code
end
app / models / access_code.rb
class AccessCode
  include MongoMapper::Document

  key :code, String, :required => true
end

1 Ответ

0 голосов
/ 19 июля 2010

После нескольких дней, когда я бился головой о стену, у меня все в основном работает (я говорю, в основном, работает, потому что я не уверен, что что-то не так, что я еще не обнаружил). Исправление было на самом деле довольно простым, когда я понял это.

Чтобы решить эту проблему и получить мои огурцы шаги, работающие с pickle , я изменил MongoMapper::Document, чтобы включить Pickle::Adapter::Base. Я использовал lib / pickle / adapters / active_record.rb и data_mapper.rb (тот же путь, что и active_record.rb), которые поставляются с pickle в качестве примера. Мне все еще нужно было machinist_mongo , предположительно, чтобы подключить рассол к моим чертежам машиниста.

Я не могу взять кредит на код в def self.model_classes - он украден с маринованной вилки tjtuom .

PS. Если это абсолютно неправильный способ сделать это, пожалуйста, не стесняйтесь критиковать или давать предложения, я полный рубиновый нуб.

module MongoMapper::Document
  module PickleAdapter
    include Pickle::Adapter::Base

    def self.model_classes
      @@model_classes ||= ::MongoMapper::Document.descendants.to_a +
        ::MongoMapper::Document.descendants.map { |klass| klass.subclasses }.flatten
    end

    # get a list of column names for a given class
    def self.column_names(klass)
      klass.column_names
    end

    # Get an instance by id of the model
    def self.get_model(klass, id)
      klass.find(id)
    end

    # Find the first instance matching conditions
    def self.find_first_model(klass, conditions)
      klass.find(:first, :conditions => conditions)
    end

    # Find all models matching conditions
    def self.find_all_models(klass, conditions)
      klass.find(:all, :conditions => conditions)
    end
  end
end

Настройка маринада для машиниста:

Pickle.configure do |config|
  config.adapters = [:machinist]
end

Для настройки database_cleaner для Монго:

require 'database_cleaner'
require 'database_cleaner/cucumber'

DatabaseCleaner.orm = 'mongo_mapper'
DatabaseCleaner.strategy = :truncation
...