首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSpec和ActiveModel

RSpec和ActiveModel
EN

Stack Overflow用户
提问于 2012-02-03 23:52:25
回答 1查看 1.7K关注 0票数 2

我有一个模块,它包含了activemodel,我想用rspec来测试它。

这是我到目前为止的设置:

代码语言:javascript
复制
lib/
 |__ my_module/
 |    |__ base.rb 
 |__ my_module.rb
spec/
 |__ my_module_spec.rb
 |__ spec_helper.rb
 |__ support/
      |__ shared_examples/
           |__ active_model.rb

在‘my_class.rb’中:

代码语言:javascript
复制
require "active_model"
require "my_module/base"

在‘base.rb’中:

代码语言:javascript
复制
module MyModule
  class Base
    extend ActiveModel::Naming

    include ActiveModel::Conversion
    include ActiveModel::Validations
  end
end

在‘my_module_spec.rb’中:

代码语言:javascript
复制
require 'spec_helper'

describe MyModule do
  describe MyModule::Base do
    it_behaves_like "ActiveModel"
  end
end

在“spec_helper.rb”中:

代码语言:javascript
复制
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'rspec'
require 'my_module'

# Requires supporting files with custom matchers and macros, etc,
# in ./support/ and its subdirectories.
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}

RSpec.configure do |config|
end

在‘active_model.rb’中:

代码语言:javascript
复制
# taken from http://pivotallabs.com/users/jdean/blog/articles/1706-form-backing-objects-for-fun-and-profit

shared_examples_for "ActiveModel" do
  require 'test/unit/assertions'
  require 'active_model/lint'
  include Test::Unit::Assertions
  include ActiveModel::Lint::Tests

  before do
    @model = subject
  end

  ActiveModel::Lint::Tests.public_instance_methods.map { |method| method.to_s }.grep(/^test/).each do |method|
    example(method.gsub('_', ' ')) { send method }
  end
end

我认为我的设置是正确的,但是当我尝试运行bundle exec rspec spec时,我得到了这些错误:

代码语言:javascript
复制
Failures:

  1) MyModule MyModule::Base behaves like ActiveModel test to key
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  2) MyModule MyModule::Base behaves like ActiveModel test to param
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  3) MyModule MyModule::Base behaves like ActiveModel test to partial path
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  4) MyModule MyModule::Base behaves like ActiveModel test valid?
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  5) MyModule MyModule::Base behaves like ActiveModel test persisted?
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  6) MyModule MyModule::Base behaves like ActiveModel test model naming
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  7) MyModule MyModule::Base behaves like ActiveModel test errors aref
     Failure/Error: example(method.gsub('_', ' ')) { send method }

  8) MyModule MyModule::Base behaves like ActiveModel test errors full messages
     Failure/Error: example(method.gsub('_', ' ')) { send method }

我在这里做错了什么?如何正确测试ActiveModel?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-04 00:01:12

你想做的太多了。因为您希望测试ActiveModel库。如果您的对象包含此模块,则只需进行测试

代码语言:javascript
复制
require 'spec_helper'

describe MyModule do
  describe MyModule::Base do
    it { MyModule::Base.should include(ActiveModel::Conversion) }
    it { MyModule::Base.should include(ActiveModel::Validations) }
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9131476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档