由aurelia.setRoot引起的Aurelia单元测试错误(' shell / shell');

时间:2017-02-27 16:33:36

标签: unit-testing karma-jasmine aurelia aurelia-cli aurelia-framework

我尝试在登录方法上实施单元测试,但我得到"无法读取属性' setRoot'未定义" 错误。

这是我的登录方法:

import { inject, Aurelia, NewInstance, computedFrom } from 'aurelia-framework';
import { Router } from 'aurelia-router';
import { Server, User } from 'backend/server';
import { ValidationRules, ValidationController, validateTrigger } from 'aurelia-validation';
import { ValidationRenderer } from 'resources/validation-renderer';

@inject(Aurelia,Router,Server,NewInstance.of(ValidationController),NewInstance.of(User))

constructor(aurelia, router, server, validationController, user) {
        this.router = router;
        this.aurelia = aurelia;
        this.validationController = validationController;
        this.server = server;
        this.user = user;
    }


 activate() {
    this.validationController.validateTrigger = validateTrigger.blur;
    this.validationController.addRenderer(new ValidationRenderer());

    ValidationRules
        .ensure(u => u.email)
        .required()
        .matches(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)
        .ensure('password')
        .required()
        .on(this.user);
}


logUserIn()
{
 let promise = new Promise((resolve, reject) => 
{

        this.loggingIn = true;
        this.messageColor = 'green';
        this.message = 'Authenticating...';
        this.loginSuccess = false;
        this.validationController.validate().then(errors => {
            if (!errors.valid) {
                this.loggingIn = false;
                return ({error: true});
            }
            return this.server.authenticate(this.user.email, this.user.password);
        }).then(result => {
            if (!result.error) {
                this.messageColor = 'green';
                this.message = 'Login Successful';
                this.loginSuccess = true;
                this.aurelia.setRoot('shell/shell');
                resolve(result);
            } else {
                this.message = '';
                resolve();
            }
        }).catch(err => {
            if(!this.loginSuccess)
            {
                this.messageColor = 'red';
                this.message = err.message;
            }
            this.loggingIn = false;
            resolve(err);
        });
    });
    return promise;
}

我的单元测试代码: login.spec.js

describe('Login Unit Test', () => {
var login = new Login();
login.validationController = new ValidationController();
login.server = new Server();
it("shouldn't allow login", (done) => {
console.log(login.messageColor);
  login.logUserIn().then((result) => {
    console.log(login.messageColor);
    console.log(login.message);
    expect(login.messageColor).toBe('red');
    done();
  });
});
it("Should log in", (done) => {   
  login.user = {email:'a@b.com', password:'abc'};
    console.log(login.user.email);    
  console.log(login.user.password); 
  login.logUserIn().then((result) => {
    console.log(login.messageColor);
    console.log(login.message);
    expect(login.messageColor).toBe('green');
    done();
    });     
});
});

这是我得到的错误 emphasized text

我真的很感激任何帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

您是否准确发布了登录代码? 在这种情况下,在构造函数之前缺少@inject语句。 有些人喜欢: @inject(Aurelia, Router, Server, ValidationController, User) constructor(aurelia, router, server, validationController, user)

相关问题