GithubHelp home page GithubHelp logo

Create chai assertion plugin about enzyme HOT 16 CLOSED

enzymejs avatar enzymejs commented on April 28, 2024
Create chai assertion plugin

from enzyme.

Comments (16)

lelandrichardson avatar lelandrichardson commented on April 28, 2024 1

@goatslacker when you build a chai plugin, it automatically adds them for all three of its APIs: expect, should and assert

from enzyme.

ljharb avatar ljharb commented on April 28, 2024

I assume to.have.all.props and to.have.any.props could be supported as well? also, expect(wrapper).to.contain(foo) / expect(wrapper).not.to.contain(foo), and expect(wrapper).to.be(Foo) / expect(wrapper).not.to.be(Foo).

from enzyme.

lelandrichardson avatar lelandrichardson commented on April 28, 2024

yes. excellent! We should get a list of the desired extensions and implement...

from enzyme.

benbayard avatar benbayard commented on April 28, 2024

Hello! I am currently working on an enzyme-chai framework. I call it chai-shallowly!

Currently the API looks like this:

    it("should render the correct type", () => {
      expect(component).to.shallowly.match("span");
    });

    it("should set default classes on the element", () => {
      expect(component).to.shallowly.haveClass("prod-ProductHelpFlyoutButton inline-block-xs");
    });

    it("should render the correct type of children", () => {
      expect(component).to.shallowly.haveComponent(Flyout);
    });

I am likely going to spin this in to its own repo though, not inside reagent.

What do you think?

from enzyme.

goatslacker avatar goatslacker commented on April 28, 2024

How about also having one with a better API like assert?

from enzyme.

goatslacker avatar goatslacker commented on April 28, 2024

Well that's badass. TIL

from enzyme.

benbayard avatar benbayard commented on April 28, 2024

@goatslacker what said @lelandrichardson is correct. Some of what I am doing is name spacing (e.g. haveClass vs .have.class ). I'm working only on porting over shallow rendered portion.

from enzyme.

vesln avatar vesln commented on April 28, 2024

chai.js core dev here.

here at product hunt, we've built an internal project, quite similar to enzyme, and we are now looking to migrate.

we already have custom chai.js assertions for our internal project, and porting those for enzyme will be quite straight forward.

if you are interested in a collaboration, let me know.

edit: some assertions we use

to.have.tagName
to.have.html
to.have.style
to.have.text
to.have.value
to.have.css
to.have.attr
to.have.props
to.have.component().with.props()

most of the stuff from https://github.com/chaijs/chai-jquery is applicable too

from enzyme.

benbayard avatar benbayard commented on April 28, 2024

We are currently working on moving this from internal testing to external
open source. There are just a few more improvements we will need to make.
I'll keep you updated.

from enzyme.

ljharb avatar ljharb commented on April 28, 2024

@vesln that sounds awesome! As you migrate the chai matchers, could you ensure that none of them end in properties, ie, they all require a terminal function invocation?

from enzyme.

vesln avatar vesln commented on April 28, 2024

All, we just open sourced our chai.js assertions for enzyme. Feedback/prs/feature requests/issues are very welcome!

@ljharb lmk if you are ok with including it in the docs so more people can discover and leverage it.

I'll update chai.js's website later this week as well.

from enzyme.

ljharb avatar ljharb commented on April 28, 2024

@vesln awesome! The only issues I see are to.be.empty and to.exist - our styleguide's eslint plugin prohibits these (noop expressions) and airbnb/javascript#646 and #97 (comment) talk a bit more about why they should be avoided. Should I file an issue on chai-enzyme directly?

Otherwise, a PR would be welcome to add it to the docs :-)

from enzyme.

vesln avatar vesln commented on April 28, 2024

@ljharb the issue is that those methods are already getters in chai.js itself and we cannot redefine them.

what i can do tho is alias them to .to.be.blank() and .to.be.present(). sounds good?

from enzyme.

ljharb avatar ljharb commented on April 28, 2024

sure, that sounds awesome - i have no objection to mentioning exist/empty in the chai-enzyme docs either, as long as there's alternatives :-)

from enzyme.

vesln avatar vesln commented on April 28, 2024

πŸ‘

from enzyme.

lelandrichardson avatar lelandrichardson commented on April 28, 2024

Closing as there is now: https://github.com/producthunt/chai-enzyme

from enzyme.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.