如何使用mongo mapper,machinist和machinist mongo获得黄瓜和泡菜?

时间:2010-07-17 20:39:45

标签: ruby cucumber pickle mongomapper machinist

我想让machinistmachinist_mongomongo_mappercucumberpickle一起玩得很好。

目前我已经配备了所有配置的蓝图,我正在使用黄瓜做BDD。到现在为止还挺好。我的问题是我必须为我的所有机械师蓝图编写自定义黄瓜步骤。这本身并不是一个问题,因为它并没有让我陷入困境,但作为一个.NET开发人员检查rails,为每个蓝图编写一个步骤感觉非常脏,而在.NET中我可能会使用它反射。

有没有什么方法可以让capture_modelcapture_plural_factory等内置的pickle能够识别我的机械师蓝图?

我非常有信心我已经对机器人进行了正确配置和设置,因为当我使用blueprintname.make时,在自定义黄瓜步骤中,一切正常。

宝石版本:
轨道2.3.8
黄瓜0.8.3
黄瓜轨道0.3.2
mongo 1.0.5
mongo_mapper 0.8.2
泡菜0.3.0
机械师1.0.6
machinist_mongo 1.1.1


功能/支持/ pickle.rb:
require 'pickle/world'
Pickle.configure do |config|
  config.adapters = [:machinist]
end

我尝试使用config.adapters = [:machinist, Machinist::MongoMapperAdapter],但收到错误消息,指出factories没有方法Machinist::MongoMapperAdapter

  

未定义的方法`工厂'为Machinist :: MongoMapperAdapter:Class(NoMethodError)/usr/local/lib/ruby/gems/1.8/gems/pickle-0.3.0/lib/pickle/config.rb:25:in “工厂”

功能/支持/ 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
应用程序/模型/ access_code.rb
class AccessCode
  include MongoMapper::Document

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

1 个答案:

答案 0 :(得分:0)

经过几天的撞击我的头后,我一切都工作了(我说大部分都在工作,因为我不确定是否有什么不对的,我还没有发现)。一旦我弄明白,修复实际上非常简单。

要解决此问题,并让我的cucumber步骤与pickle一起使用,我将MongoMapper::Document更改为包含Pickle::Adapter::Base。我使用了以pickle附带的lib / pickle / adapters / active_record.rb和data_mapper.rb(与active_record.rb相同的路径)作为示例。我确实需要machinist_mongo,大概是把泡菜连接到机械师的蓝图上。

我无法理解def self.model_classes中的代码 - 它来自tjtuom's pickle fork

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

为mongo配置database_cleaner

require 'database_cleaner'
require 'database_cleaner/cucumber'

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