首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取RSpec的共享示例,如Ruby Test::Unit中的行为?

如何获取RSpec的共享示例,如Ruby Test::Unit中的行为?
EN

Stack Overflow用户
提问于 2013-01-25 01:17:31
回答 5查看 1.7K关注 0票数 8

RSpec中是否有类似于shared_examples的插件/扩展用于测试::单元测试?

EN

回答 5

Stack Overflow用户

发布于 2014-12-29 12:53:53

如果您正在使用rails (或仅使用active_support),请使用Concern

代码语言:javascript
复制
require 'active_support/concern'

module SharedTests
  extend ActiveSupport::Concern

  included do

    # This way, test name can be a string :)
    test 'banana banana banana' do
      assert true
    end

  end
end

如果你没有使用active_support,那就使用Module#class_eval吧。

这项技术建立在Andy H.的答案之上,他指出:

单元测试就是

类,所以你可以使用普通的代码重用技术

但因为它支持使用ActiveSupport::Testing::Declarative#test,所以它的优点是不会耗尽下划线键:)

票数 6
EN

Stack Overflow用户

发布于 2013-02-09 06:19:48

我能够使用以下代码实现共享测试(类似于RSpec共享示例):

代码语言:javascript
复制
module SharedTests
  def shared_test_for(test_name, &block)
    @@shared_tests ||= {}
    @@shared_tests[test_name] = block
  end

  def shared_test(test_name, scenario, *args)
    define_method "test_#{test_name}_for_#{scenario}" do
      instance_exec *args, &@@shared_tests[test_name]
    end
  end
end

要在Test::Unit测试中定义和使用共享测试,请执行以下操作:

代码语言:javascript
复制
class BookTest < ActiveSupport::TestCase
  extend SharedTests

  shared_test_for "validate_presence" do |attr_name|
    assert_false Books.new(valid_attrs.merge(attr_name => nil)).valid?
  end

  shared_test "validate_presence", 'foo', :foo
  shared_test "validate_presence", 'bar', :bar
end
票数 2
EN

Stack Overflow用户

发布于 2013-01-25 01:27:33

Ruby测试只是Ruby类,所以您可以使用与任何其他Test::Unit类相同的代码重用方法。

要编写共享示例,可以使用模块。

代码语言:javascript
复制
module SharedExamplesForAThing
  def test_a_thing_does_something
    ...
  end
end

class ThingTest < Test::Unit::TestCase
  include SharedExamplesForAThing
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14507011

复制
相关文章

相似问题

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