With the release of Rails 5.1, they included system tests. Which means we can test our JavaScript too in Rails. I see Rails guide explains a sample test creating article in both ways: via system test and via integration test.
Now the question is: before Rails 5.1 I was writing complex test cases in integration tests. But now I have two options to write a test case. I can write test case like
test: should create article
in integration test, but I can also write the same test case in system test.
So when should I choose system test to write a test case and when to choose integration tests ?
TL;DR: I would go with system tests instead of integration tests in any app I started today. The only advantage of integration tests is speed.
I think system tests have 2 great advantages over integration tests:
I think the only benefit of integration tests is speed. They are much faster indeed (check this experiment I made). For me, the speed difference is not such a big concern because:
I think both local and cloud speed and parallelization are good enough today, and will only get better with time. So I believe system tests is a much safer bet if you are starting a new app today.
The short answer has been given by MikDiet. For the long answer, check out the documentation on system and integration tests.
A quick rule of thumb is that all tests interacting with Javascript need to be run as system tests. But you could also use them to test your responsive layout, since you can specify the screen size of the browser.
Integrations tests are different because they are not run through the browser. They still allow you to interact with the HTML of the result page, but remember that it's static output you work with.
In integration tests, you are mostly looking at the behavior of the controller actions and not so much on what the user sees and interacts with. This part of the documentation might help you understand what integration tests are all about: Functional Tests for Your Controllers.