Comments (6)
I'm assuming from the title that there is no current way to generate relationships between factories?
So the right way to create relationships would be something like:
// tests/factories/contact.js
import Mirage from 'ember-cli-mirage';
export default Mirage.Factory.extend({
name: 'Pete',
age: 20,
friends: function(i) {
return [
{id: 100+i, name: "Pete's Friend", age: 21},
{id: 101+i, name: "Pete's Mom", age: 55},
]
}
});
Or is there a simpler path?
from ember-cli-mirage.
correct, no current way. I've been doing it in my tests:
var contact = create('contact', {friend_ids: [1, 2, 3]});
createList('friend', {contact_id: contact.id});
which is obviously not ideal. But I don't think you'd want to hard-code it like you've done in the factory, since you'll want different relationship setups for different tests. Also those friends won't be inserted into mirage's db.
typically Factory is bare minimum, with traits/relationships used for customizing on a per-test basis
from ember-cli-mirage.
Here's some possibilities for one to one relationships:
// factories/book.js
import Mirage from 'ember-cli-mirage';
export default Mirage.Factory.extend({
name: 'A Wrinkle in Time',
author: Mirage.association(),
author: Mirage.association('factoryName', 'trait1', {some: 'attr'),
author: Mirage.belongsTo(),
author: Mirage.belongsTo('factoryName', 'trait1', {some: 'attr'),
author: function() {
this.association();
this.association('factoryName', 'trait1', {some: 'attr'});
},
author: ['author', 'factoryName', 'trait1', {some: 'attr'}],
associations: {
author: 'author',
author: ['factoryName', 'trait1', {some: 'attr'}]
},
associations: [
'author',
['author', 'factoryName', 'trait1', {some: 'attr'}]
]
});
full api needs to include association(optionalFactory, trait..., overrides...)
from ember-cli-mirage.
Were you able to make some progress on this?
This is currently a real pain point for me, as I'm working on a scheduling app that naturally has a lot of many to many and one to many relationships. I'm currently abusing the i
parameter really hard.
Here's an example of a automatic many to many relationship:
import Mirage from 'ember-cli-mirage';
import subjects from '../fixtures/subjects';
const LENGTH = subjects.length;
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
export default Mirage.Factory.extend({
isVisible: true,
room: i => `${getRandomInt(1, 2)}.${getRandomInt(0, 2)}${getRandomInt(0, 9)}`,
studentsLocalOral: i => getRandomInt(1, 5),
studentsLocalWritten: i => getRandomInt(4, 10),
studentsRemoteOral: i => getRandomInt(0, 2),
studentsRemoteWritten: i => getRandomInt(0, 4),
subject(i) {
let s = subjects[i % LENGTH];
s.courses.push(i + 1);
return s.id;
}
});
This is all very hacky, but kinda works. However, this technique has its limits, as I can only "read" data from the fixtures, but not from previously generated factory records. If I had access to the DB in my factories, I could do some more clever stuff. It'd be still ugly as hell, but hey! 😄
Have you yet decided on a proper API for factory relationships? I'd be happy to implement it, if you can't find the time.
from ember-cli-mirage.
Ah, I see that this is probably tracked in #69 for now.
from ember-cli-mirage.
Yep see my note there. Also, I think what you said is good, having an "escape hatch" in a factory to let you access db/schema to do whatever you want.
from ember-cli-mirage.
Related Issues (20)
- Proposal to change of Mirage Setup HOT 4
- Remove autostart HOT 7
- Remove the testConfig function HOT 5
- Consider making MirageJS a peer dependency HOT 12
- Mirage not intercepting requests HOT 1
- discoverEmberDataModels() triggers `ember-data:deprecate-early-static` deprecation HOT 4
- What this addon does now that MirageJS has been extracted HOT 4
- v3 upgrade guide? HOT 1
- Timing not working in miragejs server instance HOT 1
- breaks when using ember-data 4.8.0 HOT 15
- Extending a model breaks one-to-many relationship
- Mirage cannot preload assets HOT 2
- New Release? HOT 14
- discoverEmberDataModels() fails if any pre Octane style Ember model has a property named `errors` HOT 1
- Tests only? HOT 9
- Is it possible to have a custom folder for fixtures in mirage? HOT 2
- Accessing Models using `require()` will no longer work on ember-data v5 HOT 1
- `discoverEmberDataModels` crashes if there is a non ember-data object in the app/models folder HOT 6
- mirage enabled even when using `--proxy` flag HOT 5
- Polymorphics - missing the buid method HOT 2
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 ember-cli-mirage.