2015-01-29 2 views
1

У меня есть куча rspec-теста, который использует внешние базы данных (я знаю, это не очень хорошая идея, но есть много причин, это лучшее решение в этом случае). Я настроил другой vlan с тестовой средой для запуска тестов в изолированной среде. Теперь я хочу определить, что все тесты rspec используют другой DNS-сервер для разрешения имен хостов (для работы с средой dev). Есть ли что-то, что я могу использовать?rspec с другим DNS-сервером

+1

DNS обычно настроены на OS, поэтому я не думаю, что вы можете что-то сделать. Я знаю, что это не полезно, но лучший и, вероятно, единственный способ - исправить ваши спецификации, чтобы они не вызывали внешние системы. Используйте Mocks или что-то в этом роде. Такие инструменты, как VCR (https://github.com/vcr/vcr), могут помочь вам с внешними вызовами. – mhutter

+0

Не уверен, что это помогает, но если вы использовали IP-адреса, вы могли бы использовать что-то вроде http://xip.io/ – rainkinz

ответ

1

RubyDNS может работать для вас. Этот пример почти дословно из их страницы GH:

#!/usr/bin/env ruby 
require 'rubydns' 

INTERFACES = [ 
    [:udp, "0.0.0.0", 5300], 
    [:tcp, "0.0.0.0", 5300] 
] 
Name = Resolv::DNS::Name 
IN = Resolv::DNS::Resource::IN 

# Use upstream DNS for name resolution. 
UPSTREAM = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]]) 

# start the RubyDNS server 
RubyDNS::run_server(:listen => INTERFACES) do 
    match(/database\.testing\.com/, IN::A) do |transaction| 
     transaction.respond!("10.0.0.80") 
    end 

    # Default DNS handler 
    otherwise do |transaction| 
     transaction.passthrough!(UPSTREAM) 
    end 
end 

затем запрос:

➜ ruby_dns_example dig @localhost -p 5300 database.testing.com 

; <<>> DiG 9.8.3-P1 <<>> @localhost -p 5300 database.testing.com 
; (3 servers found) 
;; global options: +cmd 
;; Got answer: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34286 
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 
;; WARNING: recursion requested but not available 

;; QUESTION SECTION: 
;database.testing.com.  IN A 

;; ANSWER SECTION: 
database.testing.com. 86400 IN A 10.0.0.80 

;; Query time: 2 msec 
;; SERVER: 127.0.0.1#5300(127.0.0.1) 
;; WHEN: Sat Jan 31 13:14:14 2015 
;; MSG SIZE rcvd: 54 

Есть много примеров здесь: Настройки распознаватель

https://github.com/ioquatix/rubydns/tree/master/examples