@@ -1465,6 +1465,211 @@ describe('dotenv-flow (API)', () => {
1465
1465
} ) ;
1466
1466
} ) ;
1467
1467
1468
+ describe ( 'when `options.files` is given' , ( ) => {
1469
+ let options ;
1470
+
1471
+ beforeEach ( 'setup `options.files`' , ( ) => {
1472
+ options = {
1473
+ files : [
1474
+ '.env' ,
1475
+ '.env.production' ,
1476
+ '.env.local'
1477
+ ]
1478
+ } ;
1479
+ } ) ;
1480
+
1481
+ it ( 'loads the given list of files' , ( ) => {
1482
+ mockFS ( {
1483
+ '/path/to/project/.env' : 'DEFAULT_ENV_VAR=ok' ,
1484
+ '/path/to/project/.env.local' : 'LOCAL_ENV_VAR=ok' ,
1485
+ '/path/to/project/.env.production' : 'PRODUCTION_ENV_VAR=ok' ,
1486
+ '/path/to/project/.env.production.local' : 'LOCAL_PRODUCTION_ENV_VAR=ok'
1487
+ } ) ;
1488
+
1489
+ expect ( process . env )
1490
+ . to . not . have . keys ( [
1491
+ 'DEFAULT_ENV_VAR' ,
1492
+ 'PRODUCTION_ENV_VAR' ,
1493
+ 'LOCAL_ENV_VAR' ,
1494
+ 'LOCAL_PRODUCTION_ENV_VAR'
1495
+ ] ) ;
1496
+
1497
+ const result = dotenvFlow . config ( options ) ;
1498
+
1499
+ expect ( result )
1500
+ . to . be . an ( 'object' )
1501
+ . with . property ( 'parsed' )
1502
+ . that . deep . equals ( {
1503
+ DEFAULT_ENV_VAR : 'ok' ,
1504
+ PRODUCTION_ENV_VAR : 'ok' ,
1505
+ LOCAL_ENV_VAR : 'ok'
1506
+ } ) ;
1507
+
1508
+ expect ( process . env )
1509
+ . to . include ( {
1510
+ DEFAULT_ENV_VAR : 'ok' ,
1511
+ PRODUCTION_ENV_VAR : 'ok' ,
1512
+ LOCAL_ENV_VAR : 'ok'
1513
+ } ) ;
1514
+
1515
+ expect ( process . env )
1516
+ . to . not . have . key ( 'LOCAL_PRODUCTION_ENV_VAR' ) ;
1517
+ } ) ;
1518
+
1519
+ it ( 'ignores `options.node_env`' , ( ) => {
1520
+ options . node_env = 'development' ;
1521
+
1522
+ mockFS ( {
1523
+ '/path/to/project/.env' : 'DEFAULT_ENV_VAR=ok' ,
1524
+ '/path/to/project/.env.local' : 'LOCAL_ENV_VAR=ok' ,
1525
+ '/path/to/project/.env.development' : 'DEVELOPMENT_ENV_VAR=ok' ,
1526
+ '/path/to/project/.env.production' : 'PRODUCTION_ENV_VAR=ok'
1527
+ } ) ;
1528
+
1529
+ expect ( process . env )
1530
+ . to . not . have . keys ( [
1531
+ 'DEFAULT_ENV_VAR' ,
1532
+ 'DEVELOPMENT_ENV_VAR' ,
1533
+ 'PRODUCTION_ENV_VAR' ,
1534
+ 'LOCAL_ENV_VAR'
1535
+ ] ) ;
1536
+
1537
+ const result = dotenvFlow . config ( options ) ;
1538
+
1539
+ expect ( result )
1540
+ . to . be . an ( 'object' )
1541
+ . with . property ( 'parsed' )
1542
+ . that . deep . equals ( {
1543
+ DEFAULT_ENV_VAR : 'ok' ,
1544
+ PRODUCTION_ENV_VAR : 'ok' ,
1545
+ LOCAL_ENV_VAR : 'ok'
1546
+ } ) ;
1547
+
1548
+ expect ( process . env )
1549
+ . to . include ( {
1550
+ DEFAULT_ENV_VAR : 'ok' ,
1551
+ PRODUCTION_ENV_VAR : 'ok' ,
1552
+ LOCAL_ENV_VAR : 'ok'
1553
+ } ) ;
1554
+
1555
+ expect ( process . env )
1556
+ . to . not . have . key ( 'DEVELOPMENT_ENV_VAR' ) ;
1557
+ } ) ;
1558
+
1559
+ it ( 'loads the list of files in the given order' , ( ) => {
1560
+ mockFS ( {
1561
+ '/path/to/project/.env' : (
1562
+ 'DEFAULT_ENV_VAR=ok\n' +
1563
+ 'PRODUCTION_ENV_VAR="should be overwritten by `.env.production"`'
1564
+ ) ,
1565
+ '/path/to/project/.env.local' : (
1566
+ 'LOCAL_ENV_VAR=ok'
1567
+ ) ,
1568
+ '/path/to/project/.env.production' : (
1569
+ 'LOCAL_ENV_VAR="should be overwritten by `.env.local"`\n' +
1570
+ 'PRODUCTION_ENV_VAR=ok'
1571
+ )
1572
+ } ) ;
1573
+
1574
+ expect ( process . env )
1575
+ . to . not . have . keys ( [
1576
+ 'DEFAULT_ENV_VAR' ,
1577
+ 'PRODUCTION_ENV_VAR' ,
1578
+ 'LOCAL_ENV_VAR'
1579
+ ] ) ;
1580
+
1581
+ const result = dotenvFlow . config ( options ) ;
1582
+
1583
+ expect ( result )
1584
+ . to . be . an ( 'object' )
1585
+ . with . property ( 'parsed' )
1586
+ . that . deep . equals ( {
1587
+ DEFAULT_ENV_VAR : 'ok' ,
1588
+ PRODUCTION_ENV_VAR : 'ok' ,
1589
+ LOCAL_ENV_VAR : 'ok'
1590
+ } ) ;
1591
+
1592
+ expect ( process . env )
1593
+ . to . include ( {
1594
+ DEFAULT_ENV_VAR : 'ok' ,
1595
+ PRODUCTION_ENV_VAR : 'ok' ,
1596
+ LOCAL_ENV_VAR : 'ok'
1597
+ } ) ;
1598
+ } ) ;
1599
+
1600
+ it ( 'ignores missing files' , ( ) => {
1601
+ mockFS ( {
1602
+ '/path/to/project/.env' : 'DEFAULT_ENV_VAR=ok'
1603
+ } ) ;
1604
+
1605
+ expect ( process . env )
1606
+ . to . not . have . keys ( [
1607
+ 'DEFAULT_ENV_VAR' ,
1608
+ 'PRODUCTION_ENV_VAR' ,
1609
+ 'LOCAL_ENV_VAR'
1610
+ ] ) ;
1611
+
1612
+ const result = dotenvFlow . config ( options ) ;
1613
+
1614
+ expect ( result )
1615
+ . to . be . an ( 'object' )
1616
+ . with . property ( 'parsed' )
1617
+ . that . deep . equals ( {
1618
+ DEFAULT_ENV_VAR : 'ok'
1619
+ } ) ;
1620
+
1621
+ expect ( process . env )
1622
+ . to . include ( {
1623
+ DEFAULT_ENV_VAR : 'ok'
1624
+ } ) ;
1625
+
1626
+ expect ( process . env )
1627
+ . to . not . have . keys ( [
1628
+ 'PRODUCTION_ENV_VAR' ,
1629
+ 'LOCAL_ENV_VAR'
1630
+ ] ) ;
1631
+ } ) ;
1632
+
1633
+ describe ( '… and `options.path` is given' , ( ) => {
1634
+ beforeEach ( 'setup `options.path`' , ( ) => {
1635
+ options . path = '/path/to/another/project' ;
1636
+ } ) ;
1637
+
1638
+ it ( 'uses the given `options.path` as a working directory' , ( ) => {
1639
+ mockFS ( {
1640
+ '/path/to/another/project/.env' : 'DEFAULT_ENV_VAR=ok' ,
1641
+ '/path/to/another/project/.env.production' : 'PRODUCTION_ENV_VAR=ok' ,
1642
+ '/path/to/another/project/.env.local' : 'LOCAL_ENV_VAR=ok'
1643
+ } ) ;
1644
+
1645
+ expect ( process . env )
1646
+ . to . not . have . keys ( [
1647
+ 'DEFAULT_ENV_VAR' ,
1648
+ 'PRODUCTION_ENV_VAR' ,
1649
+ 'LOCAL_ENV_VAR'
1650
+ ] ) ;
1651
+
1652
+ const result = dotenvFlow . config ( options ) ;
1653
+
1654
+ expect ( result )
1655
+ . to . be . an ( 'object' )
1656
+ . with . property ( 'parsed' )
1657
+ . that . deep . equals ( {
1658
+ DEFAULT_ENV_VAR : 'ok' ,
1659
+ PRODUCTION_ENV_VAR : 'ok' ,
1660
+ LOCAL_ENV_VAR : 'ok'
1661
+ } ) ;
1662
+
1663
+ expect ( process . env )
1664
+ . to . include ( {
1665
+ DEFAULT_ENV_VAR : 'ok' ,
1666
+ PRODUCTION_ENV_VAR : 'ok' ,
1667
+ LOCAL_ENV_VAR : 'ok'
1668
+ } ) ;
1669
+ } ) ;
1670
+ } ) ;
1671
+ } ) ;
1672
+
1468
1673
describe ( 'when `options.encoding` is given' , ( ) => {
1469
1674
let options ;
1470
1675
@@ -1560,9 +1765,7 @@ describe('dotenv-flow (API)', () => {
1560
1765
let options ;
1561
1766
1562
1767
beforeEach ( 'setup `options.debug`' , ( ) => {
1563
- options = {
1564
- debug : true
1565
- } ;
1768
+ options = { debug : true } ;
1566
1769
} ) ;
1567
1770
1568
1771
beforeEach ( 'stub `console.debug`' , ( ) => {
@@ -1658,6 +1861,31 @@ describe('dotenv-flow (API)', () => {
1658
1861
. to . have . been . calledWithMatch ( 'options.silent' , false ) ;
1659
1862
} ) ;
1660
1863
1864
+ it ( 'prints out initialization options [4]' , ( ) => {
1865
+ dotenvFlow . config ( {
1866
+ ...options ,
1867
+ path : '/path/to/another/project' ,
1868
+ files : [
1869
+ '.env' ,
1870
+ '.env.production' ,
1871
+ '.env.local'
1872
+ ] ,
1873
+ } ) ;
1874
+
1875
+ expect ( console . debug )
1876
+ . to . have . been . calledWithMatch ( / d o t e n v - f l o w \b .* i n i t / ) ;
1877
+
1878
+ expect ( console . debug )
1879
+ . to . have . been . calledWithMatch ( 'options.path' , '/path/to/another/project' ) ;
1880
+
1881
+ expect ( console . debug )
1882
+ . to . have . been . calledWithMatch ( 'options.files' , [
1883
+ '.env' ,
1884
+ '.env.production' ,
1885
+ '.env.local'
1886
+ ] ) ;
1887
+ } ) ;
1888
+
1661
1889
it ( 'prints out effective node_env set by `options.node_env`' , ( ) => {
1662
1890
dotenvFlow . config ( {
1663
1891
...options ,
0 commit comments