-
-
Notifications
You must be signed in to change notification settings - Fork 493
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Eliminate checking factory items in our tests #4217
Comments
Does this mean we'd be looking for tests that are asserting against default factory values? Like, a validation spec that assumes a factory creates a valid object? In the pagination example, we'd want factoried objects with spec-local values to make sure we control like which items appear in the list, as opposed to relying on values in the factory file? |
Pretty much yes, for example: |
Yeah. My concerns with using factory values are:
Specifying exactly the values we care about is a bit more typing, but makes it much easier to follow and change the tests. Factories (IMO) are basically there to fill in values that are required (due to validations etc.) but we don't actually care about or want to check in the current test. |
Hey @dorner - We've had a couple of adjacent but not completely solving PRs around this. Are we at a point where this can be either closed or reworked into something narrower? |
The PRs around this were more around making sure we don't create data that we don't need. This is more about not checking values that we didn't create ourselves. They don't really have anything to do with each other. I think we can handle this similarly to the other set, in that someone just needs to go slowly and methodically through the tests and bunch the fixes together into PRs. |
If I'm not mistaken I think #4534 (see this comment) is related to this, there's inconsistent behavior with regards to whether the inventory gets affected by different factory objects |
I'm working on this for kits as part of working on #3707 here's a checklist of all factories + link to my draft PR for kits checkbox, @cielf maybe put this in the issue description? Factories to refactor:
|
* Confirms that no tests match default values in kit factory as per rubyforgood#4217 * DRY up code by using KitCreateService
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
@jimmyli97 I hope you aren't putting all the factory rework and the kit changes together? They need to be separate. Also, I'm not sure the factories themselves need to change, so much as calling code needs to provide explicit values to them in cases where they are checking those values. |
@dorner ok I will split them up into separate PRs when I get a chance. What I did for the kit factory was the following:
I feel like that would be faster than methodically reading every spec, and also you can split up work by factory rather than by spec, but I guess it's up to whoever ends up tackling this issue as to how they want to do it. |
ah ok - so it's less about fixing the factories and more about using them to help detect tests which need to change. 👍 |
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
* Replace :with_item trait with calls to KitCreateService to make it easy to change line_item itemizable behavior later * Remove unnecessary :with_item traits * Hard code all rspecs matching against kit values, finishes rubyforgood#4217 for kits
Summary
Eliminate any dependency on factory items in the test code - step 1 - find them all.
Why?
More robust testing
Details
There shouldn't be any tests that rely on factory items having specific values or that check against factory items.
Note: Look especially at any tests that are dependent on sorting or pagination.
Review the tests with an eye to eliminating any checks against factory items. If there are very few, you may go ahead and submit
PRs to fix them, but let's assume you'll need to compile a list
That list should include, for each affected test:
source file, test description (i.e. context, describe, etc) and approximate line number
If you want to review some, and give us a list including what has been reviewed, so some one can pick things up afterwards, that's fine too.
Here is a list of all the factories:
Criteria for completion
Bonus round
The text was updated successfully, but these errors were encountered: