Consistent xtest and test.skip in Jest - jestjs

I can use this lint rule to make Jest tests consistently it or test.
Is there a way for enforce consistency when disabling tests? For example, only allow text.skip and disallow xtest.
The solution does not need to use a linter (ESLint). I was hoping to find a Jest config that controlled this but no luck so far.

Related

Performance testing with Jest in context of CI/CD

We're using in our product Jest for Unit and Integration tests.
At the moment, we're searching for a solution to measure the duration of scenarios (Unit, API and E2E level) between two CI/CD builds, to see if code changes lead to performance decrease/increase.
There are solutions outside like JMeter and Gattling, but it feels not a right fit. On the one side, you have to write tests again that we already have written in Jest. And on the other side, these tools are more focused on Load, Scalability, Breakpoint, Stress testing etc. which feels a bit over dimensioned for our use case. (We're using completely serverless architecture, and we only want to know if code changes have an impact on performance)
So I was thinking if it's not maybe simply possible to utilize the Jest tests that we have already written, to measure also in some way the performance and compare it between CI/CD builds.
Do you know if there is some library or tool that could help me with that? Or do you have perhaps a complete different opinion, how to approach that?

Integration Testing a Node Server without much configuration

I want to set up a CI/CD workflow which includes testing my server as a whole.
Using node I have a couple options such as
Jest,
Mocha,
Chai
or a different approach such as Postman/Newman.
I have tried out Jest and found it very difficult to adjust my databases such as Postgres and Redis to the mock environment. In fact, I didn't get it to work at all, presumably because of all the technologies involved.
Is there is a tool, maybe one of the others mentioned, that takes the server as it is, without any additional configuration, calls the endpoints of the Server and gives me results, which I can then use to further take action (push/rollback/discard changes)?

Testing express application with mongodb

I have a question regarding the different tests for a node and specifically an express application.
I am new to node/express coming from a PHP background, so have a few questions.
I know about unit testing, using things like PHPUnit, so I have read about about Jest. My specific questions regarding jest and unit testing in an application like express. Is should I be breaking my code apart more? It currently is quite together my routes are basically where all my business logic is found. Which means it's difficult to unit test?
Then with something else like end to end testing, I am looking at testcafe. For this I am really unsure how to get past my authentication and furthermore how to test on my local machine, before pushing code to production.
Full disclosure, I have a CI setup to my main branch, so I am looking to implement these tests to stop me merging breaking code to my master branch and breaking the production site.
Personally I always prefer mocha.js for testing any node app. It specifies how many test cases are passing, generates a report for those which are not passing. Also it specifies the time required to execute a code segment.
I'm also relatively new to node. I use the same stack as you (Express + MongoDB), applying MVC pattern. In Java I used to write a lot of unit tests with Spock, but right now I focus mostly on integration testing.
In my opinion routes should not contain any logic. Try to move it to separate layer - services. This way you can focus on testing logic provided by them, instead of trying to test code hidden in your routes.
For testing I use mocha.js, chai and chai-http.
My approach is to set up test database and form my tests as a sequence of requests. There is no problem with testing authentication that way - just need to correctly set up db with some user data. If you want to cut off the dependencies like database, use sinon for stubbing and mocking.
The obvious downside of this approach is testing time, but you can split tests into unit and integration suites. Run your unit tests locally and integration tests in your CI pipelines.
I'm not sure if it's the best approach, but I'm positive about the effects. Learning new technology means refactoring a lot. I have changed the structure of my project multiple times, moving logic, extracting methods and classes etc. Integration tests assure me that I haven't broken the business logic, despite having changed what's in the black box. This kind of breaking changes would be way harder to maintain with unit tests.

Best practices for testing a web app based on http calls

I've built a web app that aggregates trading and blockchain data from several API's and displays them in a React frontend(node backend)
What is the best way to implement tests to check for data integrity or when there are issues?
I am extremely new to testing and would appreciate any guidance/direction. Have gone through several testing frameworks and libraries, and am kind of dumbfounded.
You don't really test apps for 'integrity' of data as you name it.
Especially when data comes from external (not your DB for example) sources.
If you own data, you can test DB integrity, but as you say that is not the case here.
What you do though is - write unit tests (functional, recursive, end2end tests too, but what you want to do will mostly be achieved by using unit tests).
Within tests, you basically provide all kinds of data to your app and check if results are what you expect them to be (both for working and breaking scenarios).
This way, you can be sure it works as you designed it.
If at one point somewhere in future, a bug is exposed or you find it yourself. Define precisely why the bug occurs and add test for it.
When after you fix code responsible for bug, all of your tests pass, you know you are good again.
As for libraries:
"Jest" https://jestjs.io/ is go-to library for many - it's for unit tests mostly.
Jasmine and Mocha are also popular choices.
For end to end testing check Testcafe - I recommend it.
https://github.com/DevExpress/testcafe
You should also test your API with Mocha, Chai, Supertest or Chakram.
This way, all layers of your app are covered and bugs can be spotted quicker.

Functional testing automation using javascript tools

I was looking for easily adoptable functional test (e2e) automation tools using javascript. I did some exploration and picked some (Mocha, Jasmine, nightwatch, and intern). It is mentioned commonly that Mocha, and Jasmine are used for unit test automation, and nightwatch/intern can be used for functional test automation (e2e).
I really don't understand the difference between these tools or what makes them to be categorized under functional or unit test tools? Can't Mocha or Jasmine be used for functional test automation?
Added to that, http://theintern.io/ compares the market leading javascript tools feature wise. "includes functional testing" feature is applicable only for intern and nightwatch. I need clarification that why the same cannot be done in Mocha/Jasmine. Need your expertise answers.
thanks
mani
Mocha and Jasmine are purely unit testing frameworks. They don’t come with any code that could be used for performing functional testing. You could cobble together something yourself, using Mocha or Jasmine as the basis for writing tests and then adding some additional WebDriver client library like Leadfoot, but you’d still need to figure out how to start and stop browsers, how to also run unit tests against your code in each of the browsers, how to run tests in parallel so it isn’t horribly slow (Mocha and Jasmine are both designed to only ever run one test at once), how to hook up to a cloud hosting provider using their software tunnels (if you want), and write and maintain all of that glue code yourself. Oh, and you lose all the other features that come with Intern, like integrated code coverage analysis, source map support, etc.
Intern provides all of this out of the box, and was actually designed with this sort of testing in mind, which means it will always work better than any solution you try to create yourself using some other library that wasn’t designed for the task at hand. This question is a lot like asking, “can’t I just write my own testing framework from scratch using plain JavaScript?”. Sure, you can do everything in plain JS. It doesn’t mean it’s a good idea, though.

Resources