ruby-on-rails - Mock Sequel 连接到 Oracle 数据库

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

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

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

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:

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

最佳答案

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

关于ruby-on-rails - Mock Sequel 连接到 Oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246567/

相关文章:

ruby-on-rails - 响应发送到浏览器后在 Rails 中执行代码

ruby-on-rails - 如何获取数组中的下一个和上一个元素,Ruby

ruby-on-rails - 按多个唯一字段查找 Rails

.net - OracleBulkCopy 与 SQL*Loader 性能对比

java - 如何在带有注释的mybatis和oracle中插入时返回ID

java - 在xml配置中为没有具体实现的接口(interface)创建spring bean

ruby-on-rails - Ruby on Rails 将列表拆分或切片为列

java - DdlTransactionIsolatorJtaImpl 无法找到 TransactionManager

php - symfony2 Controller 的功能测试 : How to generate a route

java - 如何指定单个测试由 play framework 的 "test-only"命令运行