Move Test > Gotchas section to new page /Automated-Testing-Gotchas (HEAD 5b34302)

Kristina Lim
2019-02-07 19:22:25 +08:00
parent 5b3430235c
commit 177cb8589f

@@ -49,34 +49,4 @@ Bad
`expect(json_response['errors']).to eq "Hm, something went wrong. No order cycle data found."`
Good
`expect(json_response['errors']).to eq I18n.t('admin.order_cycles.bulk_update.no_data')`
## Gotchas
### Multiple consecutive spaces in HTML
Multiple consecutive spaces in HTML are rendered as a single space in the browser, and consequently also processed that way by `has_text?` and `has_content?` methods in Capybara. But they retain the original number of spaces when using `contains()` in CSS selectors and when inspecting strings in Javascript and Ruby.
This can cause format-related intermittent spec failures, such as when dealing with space-padded strings. An example is the day of month when `Date` is in `:long` format:
```ruby
# Two spaces before day of month
Date.new(2019, 1, 2).to_formatted_s(:long)
# => "January 2, 2019"
# One space before day of month
Date.new(2019, 1, 20).to_formatted_s(:long)
# => "January 20, 2019"
```
### Design tests to pass regardless of time of execution
A test may be run at any time of day, any day of month, and any calendar month. Make sure that the test will always pass.
Some things to watch out for:
* `now + 1.hour` can still be part of today, or it can be tomorrow.
* `today - 1.day` can be in the current calendar month, or last month
* `today + 1.day` can be part of this calendar year, or next year
If needed, you may also use `Timecop` to mock the time at which the test thinks it is running.
`expect(json_response['errors']).to eq I18n.t('admin.order_cycles.bulk_update.no_data')`