【问题标题】:Stubbing method in ActionDispatch::IntegrationTestActionDispatch::IntegrationTest 中的存根方法
【发布时间】:2015-06-17 04:53:44
【问题描述】:

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

Stripe::Charge.stubs(:retrieve).returns({:balance_transaction => 40})

但我得到以下信息:

NoMethodError: undefined method `stubs' for Stripe::Charge:Class

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

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

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

【问题讨论】:

  • 你使用哪个框架?更多代码示例可能吗?
  • 添加了我正在尝试运行的完整测试

标签: ruby ruby-on-rails-4 integration-testing


【解决方案1】:

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

【讨论】:

  • 感谢您的回复,我已将完整的测试方法添加到问题中。请注意,将其更改为 .stub 仍然会引发相同的错误。部分问题是我不想使用 rspec,这是一个开箱即用的标准 rails 集成测试。
【解决方案2】:

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

# Gemfile
gem "mocha", :group => :test

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

现在你可以像这样存根:

Stripe::Charge.stubs(:retrieve => {:balance_transaction => 40})

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

Stripe::Charge.expects(:retrieve)
  .with(:id => "abc123")
  .returns({:balance_transaction => 40})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2015-08-21
    相关资源
    最近更新 更多