moll / js-must

An assertion library for JavaScript and Node.js with a friendly BDD syntax (awesome.must.be.true()). It ships with many expressive matchers and is test runner and framework agnostic. Follows RFC 2119 with its use of MUST. Good stuff and well tested.
Other
336 stars 35 forks source link

export expect as alias of must to simplify imports #74

Open danyg opened 6 years ago

danyg commented 6 years ago

Hi, love this library, much better and safer than chai.

I'm migrating some test done with mocha, chai and typescript, and just a silly request could you export expect as an alias of the function must?

See if you want to use expect on typescript this is what you need to do:

import must from 'must';
const expect = must;

If you try to do this:

import { must as expect } from 'must';

Typescript parser understands that you want to export the must property on the Object returned by require which is an instance of Must according to must.d.ts, in particular this:

    interface Object {
        must: Must;
    }

Other option would be to change expect to must in my tests, but it looks weird:

await must(testee.load()).must.reject.to.error(Error, 'message');
// must must === very must?

I know this intended to be used this way:

await testee.load().must.reject.to.error(Error, 'message');

But don't feel safe using this notation to be honest.

Cheers!

moll commented 6 years ago

Hey!

Hmm, I've not used Typescript myself, but that sure sounds weird. Doesn't it have a way rename the default export just like with plain CommonJS you can do var expect = require("must")?

I definitely want you to be able to rename the default export to expect if you prefer that over the prototype-extension approach.

chrisgedrim commented 6 years ago

The only thing exported by Must is declare function must(expected: any): Must;

As it's exporting a single function you can import * as expect from 'must';

moll commented 3 years ago

Hey! Did @chrisgedrim recommendation fit your use case, @danyg?