是否重复自定义匹配器或match_requests_on覆盖播放



我对一些发送SMS消息的代码进行了集成测试。

测试发送初始消息,比如"Hello,world",并使用VCR验证对外部SMS提供商的调用是通过HTTP API进行的。

然后,该测试模拟通过控制器发送对SMS消息的回复。

当收到无法辨认的回复时,代码是发送一条消息,比如"对不起。不计算。"然后重新发送"你好,世界。"

测试寻找发送"对不起…"的呼叫,然后寻找重新发送"你好,世界"的呼叫

然而,第二个"Hello,world"似乎没有被代码重新发送,但测试认为是这样,因为第二个expect a_request没有失败。

我使用自定义match_requests_on: [:uri, :method]来匹配methoduri。既然第一个"你好,世界"和第二个基本相同,这条规则会产生我的假阳性吗?我关闭了重复,所以我希望两个单独的请求必须在磁带中,否则测试将失败。

我错过了什么?

您可以查看以下内容。

  1. 我认为没有提出录像机的例外情况是个问题。您是否使用任何异步库(例如Celluloid、ruby线程、delayed_job)进行并发或后台作业?一定有什么东西通过打印异常来捕获和处理异常,这可以解释为什么会看到它,但它不会报告给rspec。

  2. 您的vcr.log确实包含2个与twilio的Message.json的交互,这意味着使用:allow_playback_repeats => false(默认值),vcr将两次响应此方法/URI。

    [post https://SomeUUID:SomeSecretKey@api.twilio.com/2010-04-01/Accounts/SomeUUID/Messages.json] => [201 "{"sid": "SMea17b16d31d34ce9b9ad8c6e68987b31", "date_created": "Tue, 22 Dec 2015 "], 
    [post https://SomeUUID:SomeSecretKey@api.twilio.com/2010-04-01/Accounts/SomeUUID/Messages.json] => [201 "{"sid": "SM29ac83b5e668432e901dd75cba7bc674", "date_created": "Tue, 22 Dec 2015 "]
    

    注意:使用:record => :once,VCR将记录您所做的尽可能多的交互/请求,然后将磁带冻结为只读。

  3. 在vcr.log中搜索[Cassette: 'cms/sms_08'] Initialized with options。您会注意到磁带被加载了两次(即两次测试)。然后搜索for [post https://SomeUUID:SomeSecretKey。您会注意到,在第一个请求中,有两个Message.json请求,这两个请求都得到了成功的服务。在第二个测试中,会发出第三个请求,webmock将其标识为未处理,从而导致您看到的异常。

  4. 你说你在用expect a_request。您是否将其与.twice一起使用来指定次数?https://github.com/bblimke/webmock#setting-rspec对webmock模块的期望

相关内容

  • 没有找到相关文章

最新更新