2

我想让machinistmachinist_mongomongo_mappercucumberpickle一起玩得很好。

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

有什么办法可以让pickle内置capture_modelcapture_plural_factory等,以识别我的机械师蓝图?

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

宝石版本:
rails 2.3.8
cucumber 0.8.3
cucumber-rails 0.3.2
mongo 1.0.5
mongo_mapper 0.8.2
pickle 0.3.0 machinist
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 `factories'的未定义方法`factories'

功能/支持/机械师.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
4

1 回答 1

0

经过几天的头撞墙后,我的一切大部分都在工作(我说大部分工作是因为我不确定是否有我尚未发现的错误)。一旦我弄清楚了,修复实际上非常简单。

为了解决这个问题,并让我的黄瓜步骤与pickle一起工作,我更改MongoMapper::Document为 include Pickle::Adapter::Base。我以 pickle 附带的 lib/pickle/adapters/active_record.rb 和 data_mapper.rb(与 active_record.rb 相同的路径)为例。我仍然需要machinist_mongo,大概是为了将泡菜连接到我的机械师蓝图。

我不能把代码归功于def self.model_classes- 它是从tjtuom 的 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
于 2010-07-19T18:32:51.313 回答