Comments (6)
@KnisterPeter since you are using a browser based test runner, you should be able to use enzyme without needing jsdom. As a result, can you try running your tests without using the describeWithDOM
helper?
from enzyme.
We are running our tests with wallabyjs in node. So this is not a browser based test. Sorry for missing that detail.
from enzyme.
@KnisterPeter oops. No, that's my fault. I thought I knew what wallaby.js was, but apparently I didn't.
I'm not sure what the error is then. The error you're getting is an indication of mocha-jsdom
attempting to create a window
and document
object, but finding them already on the global namespace and thus throwing. Does wallaby.js perhaps inject some browser-like APIs into the global namespace?
from enzyme.
I don't think so. Maybe its 'watching' your code and then reevaluate or something like this.
Wouldn't it be possible for enzyme to add an option for 'skipWindowCheck' in the describeWithDOM
method?
from enzyme.
@lelandrichardson wallaby.js supports both browser and node testing.
The issue is that mocha-jsdom
deletes global.window
in mocha after
hook, and wallaby.js (as a continuous test runner) can't guarantee that the hook will be invoked.
For example, if you have a few async tests, and they are running, and you change your code at the same time, wallaby.js will force cancel the previous run, and the hook may not be executed (under some circumstances). Also some code changes may require wallaby to force cancel the run, for example introducing an infinite loop in your code or high level test structure errors. Because wallaby runs your tests as you type, the likelihood of such changes is much higher than when you run your tests occasionally with plain mocha.
mocha-jsdom
exports a function that supports a few options (as @KnisterPeter mentioned skipWindowCheck
is one of them that could help) and enzyme
could support passing those options to it.
A cleaner solution only requiring a small addition to the wallaby config file would be to use wallaby.js teardown
function to just delete the window object if it wasn't deleted by the after
hook. The function is guaranteed to be called no matter what kind of changes wallaby.js had to deal with (unless the changes require to recycle node.js process, in which case you don't have to care about the window object anyway).
module.exports = function () {
return {
...
teardown: function(){
delete global.window;
}
};
};
There's another solution which can make wallaby.js work just like other test runners (kill node.js process after tests are finished) with the workers.recycle
option. Even though wallaby will still be faster then other runners (because it'll execute only affected tests, not all tests), you'll notice that tests are running a bit slower than without the option. I only recommend using the option when you really need that kind of a separate process isolation for each test run and can't really allow wallaby to reuse node processes.
from enzyme.
Thanks @ArtemGovorov
I've created a pull request with the optional options for jsdom but I will give the teardown a try as well.
from enzyme.
Related Issues (20)
- enzyme-adapter-react-18 HOT 2
- Component is not re-rendered with updated states HOT 5
- Cheerio 1.0.0-rc.11 no longer support deep imports HOT 3
- enzyme crash since Cheerio 1.0.0-rc.11 release HOT 5
- CSS selectors match component props rather than rendered DOM HOT 6
- Cannot read property 'child' of undefined on React 16 + enzyme-adapter-react-16 HOT 1
- Cannot read property 'child' of undefined enzyme-adapter-react-16 and react 17.0.2 HOT 3
- "TypeError: Cannot read properties of undefined (reading 'current')" in mount API HOT 7
- Method βpropsβ is only meant to be run on a single node. 0 found instead. HOT 1
- How to test the form which is rendered based on props in class component in react.js ? HOT 3
- How to test the state values which are setting the state from local storage inside componentDidMount in enzyme using reactjs ? HOT 5
- Function `mount` does not mock proper data HOT 5
- [email protected] does not include latest changes as per master HOT 5
- Document `getElement(s)` for full DOM rendering HOT 3
- TypeError: window.require is not a function HOT 5
- Does Enzyme support React 18.0.2 ? HOT 1
- Is this library 'dead'? HOT 5
- Explain how the synchronization works HOT 1
- Mount and simulate are failing after changing to Node 16 HOT 10
- enzyme-adapter-react-18 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from enzyme.