MockDataStoreService - seamless local development & testing with datastores

This is awesome, thanks!

2 Likes

Thanks for the contribution. This is awesome!

1 Like

It would be good to simulate the request limits for the data store as well.

1 Like

Need some ice for that burn

Thank God this exists though. I was so annoyed I was no joke gonna make one, arguably of worse functionality, at home. Wonderful.

2 Likes

As you can see in the OP, that’s already on the TODO list. It was a non-trivial amount of work to implement so I left it out for v1. If you want you can file a pull request for it if you can manage to edit the code in a clean way to support it!

EDIT: budgeting and throttling is now supported!

1 Like

This has been updated to fully support datastore budgeting and throttling of requests, and the code has been cleaned up (better file structure)!

As far as I am aware, this now perfectly emulates DataStoreService behavior. I spent a lot of time checking scenarios and making sure this module reflects the behavior. If you do spot inconsistencies between this module and the actual service, please let me know.

Thanks @Validark for comments and small improvements on v1 of the code, and @LouieK22 for initial work done on the 6 second write rule.

8 Likes

Wow thanks for all of this, it’s super cool!

1 Like

Updated with a way to simulate errors similar to what Diabolical Mode used to do in Studio:

(Also updated the first post here, since it seems like I hadn’t updated the model file included there since I wrote this thread and missed some description of features)

3 Likes

Do the errors intentionally not include error codes?

I opted not to because datastore errors were not consistent with providing the error code at all, when this module was made.

Feel free to submit a pull request to add them, although make sure it matches the behavior of actual datastores. Some request errors are ambiguous in terms of the code they should intuitively apply (some data checks are done after the remote call is performed and return a 5xx where you would otherwise expect i.e. 1xx).

5 Likes

This is a seriously wonderful thing you have made here. If you do a lot of code and like to test your changes a lot something like this speeds your development significantly by avoiding the multiple second datastore delays you get otherwise.

I have a question, is there a way we can save data ‘Automatically’ when testing? I can print out a jsonencoded string of what I’m saving and manually put it back in but I think it would be nice to have an automated system.

Thanks again!

2 Likes

No, this is purely to mock datastores. Mocks are not meant to persist.

You can add a small bit of code to push the contents of the datastores to some external storage on game:BindToClose and then load it again on game start. This is outside of the scope of the module.

1 Like

The master branch of the module was updated to support new max datastore size:

Thanks @Fractality !

2 Likes

This looks awesome and the fact your still updating it 2 years later as well :+1:t2: thank you.

2 Likes

I removed the model file from this post and will instead be posting them here:

These are automatically generated from the default.project.json whenever master branch updates, then I can describe and publish from there.

3 Likes

Is there a way to reset the state of the service? I am using this for unit tests and I want to reset it so previously cached values and limits don’t carry over across tests.

1 Like

Yes, there is:

MockDataStoreManager.ResetBudget()
MockDataStoreManager.ResetData()
4 Likes

Thanks for showing me this!

Does this support logging what calls were made? Like printing them? I had to make a little thing to print when a script used SetAsync, UpdateAsync, GetAsync and such. If it doesn’t I think it would be a cool addition!

1 Like

You can give these settings a spin: MockDataStoreService/MockDataStoreConstants.lua at 4ebdaf42d12576decae32741e2a1d8d7c3501b39 · buildthomas/MockDataStoreService · GitHub

2 Likes

I guess you aren’t really actively maintaining this anymore, you haven’t even done anything in GitHub for the last 7 months, anyhow, I have to ask, are there any plans to introduce DS V2 features into MockDS? I kind of wanna try doing that myself, but I don’t know if I would do it well or even have a consistent code style with the rest of your code. I might try it out, not sure.