goatslacker / goatslacker/alt

Async code calls MyStore.listen() twice.

Open
#628 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
JavaScript
Stars
3.4k
Forks
312
PR merge metrics
No merged PRs in 30d

Description

Hello, I've come across an issue where MyStore.listen() will get called twice in my unit tests/production code if I use async code within the store. Here is my store code, the apiResolver is just a light wrapper on top of axios.

```
tryRegister: function(registerObj) {
apiResolver.registerUser({
email: registerObj.email,
password: registerObj.password,
platform: 'app'
})
.then(function() {
this.setState({error: false, registered: true});
}.bind(this))
.catch(function(error) {
this.setState({error: {title: 'Registration Failure', message: error.data}});
}.bind(this));
}
```

Unit test code

```
it.only('if successfully registered, set state object registered to true', function(done) {

// Given
var apiResolverMock = {
registerUser: sinon.stub().returns(Promise.resolve(true))
};

resetRewires.push(rewiredAuth.__set__('apiResolver', apiResolverMock));

AuthStore.listen(function(state) {
console.log(state);
expect(state.registered).to.equal(true);
done();
});

expect(AuthStore.state.registered).to.equal(false);

// When
AuthActions.tryRegister({
email: 'email@example.com',
password: 'password'
});

});
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.