Компонент модульного тестирования, который зависит от RouterExtensions от «nativescript-angular / router» для навигации - PullRequest
0 голосов
/ 23 октября 2019

Я пишу юнит-тест на нативном угловом компоненте для проверки нескольких вещей: 1) Отправить функцию для формы входа и 2) навигацию / просмотр маршрутизатора после успешного входа.

В компоненте яиспользуя RouterExtensions из nativescript-angular/router для навигации

В конструкторе компонента я инициализирую компонент с учетными данными пользователя по умолчанию и передаю routerextension в качестве аргумента.

constructor(private page: Page,private routerExtensions: RouterExtensions){
     this.page.actionBarHidden = true;
     this.user = new User();
     this.user.email = "dennis@gmail.com";
     this.user.password = "password";
 }

при успешном ведении журнала iя перемещаю пользователя на страницу home, и логика для этого выглядит следующим образом.

    submit(){
        if (!this.user.email || !this.user.password) {
            this.alert("Please provide both an email address and password.");
            return;
        }
        this.processing = true;
        if(this.isLoggingIn){
            this.login();
        }else{
            this.register();
        }

    }
    login() {
        console.log(this.user)
        if(this.user){
            this.processing = false;
            this.routerExtensions.navigate(["/home"], { clearHistory: true });
        }else{
            this.processing = false;
            this.alert("Unfortunately we could not find your account.");
        }

    }

Я использую mocha для тестирования, и мой модульный тест на данный момент выглядит следующим образом

var reflect = require("reflect-metadata");
var component = require("../app/login/login.component");

describe("Test for Login component", ()=>{
    var appComponent;
    beforeEach(()=>{
        appComponent = new component.LoginComponent();
    });

    it("Should Login User", ()=> {
        appComponent.submit();

        assert.equal(appComponent.user.email,"dennis@gmail.com")
        assert.equal(appComponent.user.password,"password")
    });

    it("Should navigate user to home page",()=>{
        // Logic for testing that the view is home page.
    })
});

При запуске теста я получаю эту ошибку

    TypeError: Cannot read property 'navigate' of undefined

Я понимаю, что эта ошибка является результатом этой строки: this.routerExtensions.navigate(["/home"], { clearHistory: true }); в методе login(), потому что при комментировании тест проходит успешно.

Что я не уверен, так это как написать модульный тест для проверки как маршрутизации страницы, так и представления о том, что пользователь находится. Как я высмеиваю проблему с навигацией. Спасибо

...