'testing navigation from one view model to other viewmodel

I am trying to create test which be able to check navigation between two viewmodels.

Some code from ResultViewModel

    private IMvxCommand homeCommand;
    public IMvxCommand HomeCommand => homeCommand ?? (homeCommand = new MvxAsyncCommand(ShowHomePage));
    private async Task ShowHomePage()
    {
        await _navigationService.Navigate<HomeViewModel>();
    }

Testing code private Mock mvxNavigationService = new Mock(); private Mock resultService = new Mock();

    [Test]
    public void Test1()
    {
        var viewModel = new ResultViewModel(mvxNavigationService.Object, resultService.Object);

        viewModel.HomeCommand.Execute();

        mvxNavigationService.Verify(service => service.Navigate<HomeViewModel>());

        Assert.Pass();
    }

I am getting error "An expression tree cannot contain a call or invocation that uses optional arguments." on line mvxNavigationService.Verify(service => service.Navigate()); Not sure where the issue is.



Solution 1:[1]

In Xamarin, a dedicated page navigation method is officially provided.

You can navigate between pages like:

await Navigation.PushAsync (new Page());

You can pop pages from the navigation stack like:

await Navigation.PopAsync ();

For more usage, please refer to: Hierarchical Navigation.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Wen xu Li - MSFT