首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RSpec 2:哈希匹配器与通配符?

RSpec 2:哈希匹配器与通配符?
EN

Stack Overflow用户
提问于 2014-07-05 09:24:46
回答 1查看 1.3K关注 0票数 1

我开发并计划根据一组预定义的答案测试REST,当然,在服务器的JSON响应中,像URL(嵌入I)这样的东西将与(固定的)期望字符串不匹配。

是否有rspec2 (我们还没有迁移到rspec3 )匹配器来比较包含String、Fixnum和更多散列的(多级)哈希和包含String、Fixnum、Regexps (可以匹配多个字符串和Fixnum对象)和更多哈希的哈希?

示例:我需要这个API响应(在JSON中),

代码语言:javascript
运行
复制
response = { 
  id: 295180,
  url: "http://foo.bar/api/v1/foobars/295180",
  active: true,
  from: "2014-10-01T13:00:00+02:00",
  to: "2014-10-11T13:00:00+02:00",
  user: {
    id: 913049,
    url: "http://foo.bar/api/v1/users/913049",
    name: "john Doe",
    age: 29,
  }
}

由这个比较器匹配,它可以(并且应该)包含在单独的文件中(例如。matchers.json_re)

代码语言:javascript
运行
复制
expectation = { 
  id: /\d+/,
  url: /http:\/\/foo\.bar\/api\/v1\/foobars\/\d+/,
  active: /(true|false)/,
  from: /2014-\d{2}-\d{2}T13:00:00+02:00/,
  to: /.*/,
  user: {
    id: /\d/+,
    url: /http:\/\/foo\.bar\/api\/v1\/users\/\d+/,
    name: "john Doe",
    age: 29,
  }
}

有点像

代码语言:javascript
运行
复制
response.should == hash_re(expectation)

在rspec2中。

或者,对于API响应测试,是否有完全不同的方法?

EN

回答 1

Stack Overflow用户

发布于 2014-07-06 07:39:52

有一个内置的匹配器,它可以做你想做的事情,但是你可以用定制匹配器来实现它。对于初学者来说,这做了一些您想要的事情:

代码语言:javascript
运行
复制
require 'rspec/expectations'

RSpec::Matchers.define :be_hash_matching_regexes do |expected|
  match do |actual|
    expected.all? do |key, regex|
      actual[key].to_s.match(regex)
    end
  end
end

然后允许你做:

代码语言:javascript
运行
复制
response.should be_hash_matching_regexes(expectation)

这个实现没有完成您所追求的深度匹配,但是扩展它应该是非常简单的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24584940

复制
相关文章

相似问题

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