首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionDispatch::IntegrationTest中的存根方法

ActionDispatch::IntegrationTest中的存根方法
EN

Stack Overflow用户
提问于 2015-06-17 12:53:44
回答 2查看 1K关注 0票数 7

我正在做一些条带集成测试,我想要存根/模拟一些端点。我尝试这样做:

代码语言:javascript
复制
Stripe::Charge.stubs(:retrieve).returns({:balance_transaction => 40})

但我得到了以下结论:

代码语言:javascript
复制
NoMethodError: undefined method `stubs' for Stripe::Charge:Class

存根的正确语法是什么?Rails 4,Ruby 2。

编辑:这是我的完整测试方法。本质上,我的payment_succeeded webhook点击stripe来检索费用和它关联的余额交易,以便记录交易费用。我使用stripe_mock来模拟webhook事件,但我更愿意使用标准的存根技术来清除其余的事件。请注意,即使我将其更改为' stub‘,它也会抛出上面相同的错误(使用stub替换stub)。

代码语言:javascript
复制
require 'test_helper'
require 'stripe_mock'

class WebhooksTest < ActionDispatch::IntegrationTest
  # called before every single test
  def setup
    StripeMock.start
  end

  # called after every single test
  def teardown
    StripeMock.stop
  end

  test 'invoice.payment_succeeded' do
    Stripe::Charge.stubs(:retrieve).returns({:balance_transaction => 40})
    event = StripeMock.mock_webhook_event('invoice.payment_succeeded', { :customer => "stripe_customer1", :id => "abc123" })
    post '/stripe-events', id: event.id
    assert_equal "200", response.code
    assert_equal 1, StripeInvoicePayment.count
    assert_equal 'abc123', event.data.object.id
  end
end
EN

回答 2

Stack Overflow用户

发布于 2015-06-22 00:50:07

在我看来,这里唯一不正确的是.stubs,而它应该是.stub

票数 1
EN

Stack Overflow用户

发布于 2015-06-26 10:44:15

由于您没有使用RSpec,因此我建议您安装mocha gem以获得完整的模拟和存根工具选择。这里有一个快速入门:

代码语言:javascript
复制
# Gemfile
gem "mocha", :group => :test

# test/test_helper.rb
require "mocha/mini_test"

现在,您可以像这样使用存根:

代码语言:javascript
复制
Stripe::Charge.stubs(:retrieve => {:balance_transaction => 40})

或者,如果您想验证该方法是否被实际调用,您可以设置一个期望:

代码语言:javascript
复制
Stripe::Charge.expects(:retrieve)
  .with(:id => "abc123")
  .returns({:balance_transaction => 40})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30882575

复制
相关文章

相似问题

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