【问题标题】:Mock Sequel connections to Oracle database模拟到 Oracle 数据库的 Sequel 连接
【发布时间】:2015-05-14 20:17:33
【问题描述】:

我正在尝试测试一个使用 Sequel gem 连接到远程 Oracle 数据库的 Rails 应用程序。由于用户需要登录才能使用该站点,因此我使用的是 WebMock。但是,因为 WebMock 停止了对外部源的所有请求,所以每次运行测试时都会收到错误 Sequel::DatabaseConnectionError: OCIError: ORA-12541: TNS:no listener。我将如何模拟数据库连接?我应该尝试其他方法吗?

我不确定要提供什么代码,所以这里有一些可能与可能的解决方案相关的 sn-ps:

database_connection.rb:

class DatabaseConnection
  @@db = nil

  def self.get_db
    @@db ||= Sequel.connect(Settings.db.main.to_hash)
  end

  def self.db_query(query)
    get_db[query]
  end
end

spec_helper.rb:

require 'webmock/rspec'

WebMock.disable_net_connect!(allow_localhost: true)

RSpec.configure do |config|
  config.before(:each) do
    stub_request(:post, "/path/to/third/party").
      with(:body => "request body").
      to_return(:status => 200, :body => "", :headers => {})
  end

  # ... rest of the code
end

来自Gemfile的相关宝石:

gem 'rails', '4.0.2'
gem 'ruby-oci8', git: 'https://github.com/kubo/ruby-oci8.git'
group :development, :test do
  gem 'rspec-rails', '~> 3.2.0'
end

group :test do
  gem 'webmock' # 1.21.0
  gem 'capybara' # 2.4.4
end

【问题讨论】:

  • 我认为您不能模拟数据库连接,因为这可能是在没有 HTTP 的情况下使用 TCP/IP 套接字连接。如果你想模拟数据库,有什么能阻止你在本地建立一个 Sequel 可以与之通信的内存中的 sqlite 数据库?我认为 Sequel 默认具有该功能。如果这不起作用,您可能想要做的是通过创建一个可以代替 Sequel 但其方法会返回您期望的对象的类来模拟 Sequel 对象本身。
  • 你知道任何可以帮助我处理后者的资源吗?我不相信我能做到前者。
  • 你确定不能做前者吗? Sequel.mock 应该提供一种方法来使用伪造的内存数据库进行测试。后者就像创建一个类/模块一样简单,该类/模块具有您在 Sequel 上调用的相同方法,但会返回您的代码期望的任何内容。您甚至可以将其命名为“Sequel”,只要您还没有测试所需的真正 Sequel。这可能比简单地使用带有一次性测试数据库的 Sequel 需要更多的工作。 sequel.jeremyevans.net/rdoc-adapters/classes/Sequel/Mock/…

标签: ruby-on-rails oracle unit-testing rspec


【解决方案1】:

为了这个目的,Sequel 附带了一个模拟适配器:

@@db ||= Sequel.connect('mock://oracle')

有关如何使用模拟数据库的详细信息,请参阅文档:

http://sequel.jeremyevans.net/rdoc-adapters/classes/Sequel/Mock/Database.html http://sequel.jeremyevans.net/rdoc-adapters/classes/Sequel/Mock/Dataset.html

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2011-03-14
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多