Skip to content

Commit 438f166

Browse files
authored
Merge pull request #36 from netlify/fix-env-config
handle missing .env files
2 parents 07c1cc0 + e24a75e commit 438f166

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

nconf/env.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package nconf
22

33
import (
4+
"os"
5+
46
"github.com/joho/godotenv"
57
"github.com/kelseyhightower/envconfig"
68
)
@@ -9,9 +11,13 @@ func LoadFromEnv(prefix, filename string, face interface{}) error {
911
var err error
1012
if filename == "" {
1113
err = godotenv.Load()
14+
if os.IsNotExist(err) {
15+
err = nil
16+
}
1217
} else {
1318
err = godotenv.Load(filename)
1419
}
20+
1521
if err != nil {
1622
return err
1723
}

nconf/env_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package nconf
2+
3+
import (
4+
"io/ioutil"
5+
"os"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestEnvLoadingNoFile(t *testing.T) {
13+
os.Clearenv()
14+
15+
os.Setenv("TEST_VILLIAN", "joker")
16+
os.Setenv("TEST_HERO", "batman")
17+
18+
out := struct {
19+
Villian string
20+
Hero string
21+
}{}
22+
23+
assert.NoError(t, LoadFromEnv("test", "", &out))
24+
25+
assert.Equal(t, "batman", out.Hero)
26+
assert.Equal(t, "joker", out.Villian)
27+
}
28+
29+
func TestEnvLoadingMissingFile(t *testing.T) {
30+
os.Clearenv()
31+
out := struct {
32+
Villian string
33+
Hero string
34+
}{}
35+
36+
err := LoadFromEnv("test", "should-exist.env", &out)
37+
assert.Error(t, err)
38+
}
39+
40+
func TestEnvLoadingFromFile(t *testing.T) {
41+
os.Clearenv()
42+
43+
f, err := ioutil.TempFile("", "env-testing")
44+
require.NoError(t, err)
45+
defer os.Remove(f.Name())
46+
47+
data := "TEST_VILLIAN=joker\nTEST_HERO=batman\n"
48+
ioutil.WriteFile(f.Name(), []byte(data), 0644)
49+
50+
out := struct {
51+
Villian string
52+
Hero string
53+
}{}
54+
55+
assert.NoError(t, LoadFromEnv("test", f.Name(), &out))
56+
57+
assert.Equal(t, "batman", out.Hero)
58+
assert.Equal(t, "joker", out.Villian)
59+
}

0 commit comments

Comments
 (0)