1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
require "spec_helper"
require "rails"
require "dotenv/rails"
describe Dotenv::Railtie do
# Fake watcher for Spring
class SpecWatcher
attr_reader :items
def initialize
@items = []
end
def add(*items)
@items |= items
end
end
before do
Rails.env = "test"
allow(Rails).to receive(:root)
.and_return Pathname.new(File.expand_path("../../fixtures", __FILE__))
Rails.application = double(:application)
Spring.watcher = SpecWatcher.new
end
after do
# Reset
Spring.watcher = nil
Rails.application = nil
end
context "before_configuration" do
it "calls #load" do
expect(Dotenv::Railtie.instance).to receive(:load)
ActiveSupport.run_load_hooks(:before_configuration)
end
end
context "load" do
before { Dotenv::Railtie.load }
it "watches .env with Spring" do
expect(Spring.watcher.items).to include(Rails.root.join(".env").to_s)
end
it "watches other loaded files with Spring" do
path = fixture_path("plain.env")
Dotenv.load(path)
expect(Spring.watcher.items).to include(path)
end
it "does not load .env.local in test rails environment" do
expect(Dotenv::Railtie.instance.send(:dotenv_files)).to eql(
[
Rails.root.join(".env.test.local"),
Rails.root.join(".env.test"),
Rails.root.join(".env")
]
)
end
it "does load .env.local in development environment" do
Rails.env = "development"
expect(Dotenv::Railtie.instance.send(:dotenv_files)).to eql(
[
Rails.root.join(".env.development.local"),
Rails.root.join(".env.local"),
Rails.root.join(".env.development"),
Rails.root.join(".env")
]
)
end
it "loads .env.test before .env" do
expect(ENV["DOTENV"]).to eql("test")
end
context "when Rails.root is nil" do
before do
allow(Rails).to receive(:root).and_return(nil)
end
it "falls back to RAILS_ROOT" do
ENV["RAILS_ROOT"] = "/tmp"
expect(Dotenv::Railtie.root.to_s).to eql("/tmp")
end
end
end
end
|