diff --git a/src/__tests__/union.test.ts b/src/__tests__/union.test.ts index 9825f9f9..b752e54b 100644 --- a/src/__tests__/union.test.ts +++ b/src/__tests__/union.test.ts @@ -118,6 +118,32 @@ describe('union', () => { ufs.use(vol2 as any); expect(ufs.readdirSync("/foo")).toEqual(["bar", "baz", "qux"]); }); + + it("reads other fss when one fails", () => { + const vol = Volume.fromJSON({ + "/foo/bar": "bar", + "/foo/baz": "baz" + }); + const vol2 = Volume.fromJSON({ + "/bar/baz": "not baz", + "/bar/qux": "baz" + }); + + const ufs = new Union(); + ufs.use(vol as any); + ufs.use(vol2 as any); + expect(ufs.readdirSync("/bar")).toEqual(["baz", "qux"]); + }); + + it("throws error when all fss fail", () => { + const vol = Volume.fromJSON({}); + const vol2 = Volume.fromJSON({}); + + const ufs = new Union(); + ufs.use(vol as any); + ufs.use(vol2 as any); + expect(() => ufs.readdirSync("/bar")).toThrow(); + }); }); }); describe('async methods', () => { diff --git a/src/union.ts b/src/union.ts index 9169d653..0c8ba794 100644 --- a/src/union.ts +++ b/src/union.ts @@ -188,7 +188,7 @@ export class Union { } catch(err) { err.prev = lastError; lastError = err; - if(!i) { // last one + if(result.size === 0 && !i) { // last one throw err; } else { // Ignore error...