最近在做微信公众平台的开发,自动回复这边做了个带状态记录的关键字回复,内容写在 yml 里,类似下面这样:
菜单:
  body: |
    请回复对应功能序号:
    [1]功能1
    [2]功能1
  1:
    body: |
      请回复对应功能序号:
      [A]子功能A
      [B]子功能B
    A:
      body:  AAAAAAA
    B: 
      body:  BBBBBB
  ...
当你依次回复"菜单"、"1"、"A"三个关键字之后,就会得到一串"AAAAA"的回复 本着完全测试的目的,就写了个递归的测试,把整个关键字列表都跑一遍 像下面这样的代码一样
define_method(:recursion_test) do |key,value|
      print auto_reply
      #describe " 响应[#{key}]目录"  do
        it "响应[#{key}]消息" do
          msg_content = user_sent['text_msg']
          msg_content['Content']=key
          msg = Wxmessage.new(msg_content.to_msg)
          expect( get_content(msg.reply) ).to eq(value['body'])
        end
        if value.length>1 #子消息
          #describe '响应子消息' do
            value.each_pair do |k,v|
              recursion_test(k,v)
            end
          #end
        end
      #end
    end
可是,似乎是作用域的问题,整个 rspec 的 DSL 都失效了。 怎样传递作用域?对于类似的情况,怎样更好的测试?