When using first() you run into an error if no values are emitted and the observable completes:
expectObservable(EMPTY.pipe(
first())
).toBe('#', undefined, new EmptyError());
The take(1) operator just completes without error:
expectObservable(EMPTY.pipe(
take(1)
)).toBe('|');