Unit testing ReactiveUI view models and commands -


i have working view implemented using reactiveui , i'm trying write unit tests view model, view model doesn't seem work when used test.

specifically, executing commands not seem trigger subscribers. in test below, invoking addplayer command subscribed handler not run:

public class newgameviewmodeltests {     private newgameviewmodel viewmodel;      public newgameviewmodeltests()     {         viewmodel = new newgameviewmodel();                 }      [fact]     public void canadduptosevenplayers()     {         foreach(var in enumerable.range(1, 7))         {             viewmodel.newplayername = "player" + i;             viewmodel.addplayer.execute(null);             assert.equal(i, viewmodel.players.count);         }     } } 

here's view model i'm testing:

public class newgameviewmodel : reactiveobject {     public reactivelist<string> players { get; private set; }     public reactivecommand<object> addplayer { get; private set; }     public reactivecommand<object> removeplayer { get; private set; }     public reactivecommand<object> startgame { get; private set; }     public reactivecommand<object> randomizeorder { get; private set; }       string newplayername;     public string newplayername {         { return newplayername; }         set { this.raiseandsetifchanged(ref newplayername, value); }     }      public newgameviewmodel()     {         players = new reactivelist<string> ();          var canstart = this.players.countchanged.select(count => count >= 3);         startgame = canstart.tocommand();         randomizeorder = canstart.tocommand();          removeplayer = reactivecommand.create();         addplayer = this.whenanyvalue(x => x.players.count, x => x.newplayername,             (count, newplayername) => count < 7 && !string.isnullorwhitespace(newplayername) && !this.players.contains(newplayername))             .tocommand();          randomizeorder.subscribe(_ =>         {             using (players.suppresschangenotifications())             {                 var r = new random();                 var neworder = players.orderby(x => r.nextdouble()).tolist();                 players.clear();                 players.addrange(neworder);             }         });          removeplayer.subscribe(player =>         {             this.players.remove((string)player);         });          addplayer.subscribe(_ =>         {             players.add(newplayername.trim());             newplayername = string.empty;         });     } } 

doesn't seem fail on machine, using reactiveui master. maybe else going on?

edit: bug in reactiveui xamarin.forms, work around it, add somewhere runs @ start of test runs:

rxapp.mainthreadscheduler = scheduler.currentthread; 

Comments

Popular posts from this blog

javascript - Jquery show_hide, what to add in order to make the page scroll to the bottom of the hidden field once button is clicked -

javascript - Highcharts multi-color line -

javascript - Enter key does not work in search box -