当前位置: 首页 > 面试题库 >

AngularJS和UI-Router:在angularjs单元测试期间'错误:过渡被取代'

靳祺然
2023-03-14
问题内容

我正在尝试为我的项目创建授权包。我在单元测试中遇到了“转换已取代”错误,但我找不到实际的位置。

单元测试:

import angular from 'angular';
import 'angular-mocks';
import worldManagerApp from '../../src/world-manager-app';
import security from '../../src/security/security';

const {inject, module} = angular.mock;

describe('LoginService', ()=> {
    let $httpBackend;
    let $rootScope;
    let successHandler;
    let errorHandler;
    let LoginService;

    const USER = {username: "TEST", password: "PASSWORD"};

    beforeEach(function() {
        module(worldManagerApp);
        module(security);

    });

    beforeEach(inject((_$httpBackend_, _LoginService_, _$rootScope_) => {
        $httpBackend = _$httpBackend_;
        $rootScope = _$rootScope_;
        LoginService = _LoginService_;

        successHandler = jasmine.createSpy('successHandler');
        errorHandler = jasmine.createSpy('errorHandler');
    }));

    it('should exist', () => {
        expect(LoginService).toBeDefined();
    });

    describe('.login()', () => {

        describe('when given a proper username and password', () => {
           it('should return the username and success', () => {
               $httpBackend.expectPOST('/login').respond(200, {user: USER});
               LoginService.login("TEST", "PASSWORD");
               $rootScope.$digest();
               $httpBackend.flush();

               expect($rootScope.currentUser).toEqual("TEST");
           });
        });
    });

});

服务:

export default function LoginService($http){
    'ngInject';

    let service = {};
    service.login = login;

    function login(username, password){
        $http({
            url:'/login',
            method: 'POST',
            data: {
                username: username,
                password: password,
            },
        }).then (function(response) {
            response.username;
        }).catch(function(response){
        });
    }

    return service;
}

错误:

PhantomJS 1.9.8 (Windows 8 0.0.0) LoginService .login() when given a proper username and password should return the username and success FAILED
        Error: transition superseded
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:9387 <- node_modules/angular-mocks/angular-mocks.js:261:0
            at processChecks (C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:33750 <- node_modules/angular/angular.js:16674:0)
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:35048 <- node_modules/angular/angular.js:17972:0
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:34862 <- node_modules/angular/angular.js:17786:0
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:521 <- frontend\test\security\loginService.spec.js:42:15

我认为这是一个ui-router问题,但是如果我做错了,我无法弄清楚它应该如何工作。


问题答案:

从1.5.9角度更新到1.6.1版本后,我遇到了同样的问题,可以通过以下方式更新依赖项来解决:

npm update angular-ui-router

旧版本0.3.1会导致错误,而在更新版本0.3.2中,我的应用程序可以再次正常运行(现在使用角度1.6.1)。



 类似资料:
  • 本文向大家介绍AngularJS 单元测试过滤器,包括了AngularJS 单元测试过滤器的使用技巧和注意事项,需要的朋友参考一下 示例 过滤器代码: 考试: 跑! 备注:在inject测试的调用中,您的过滤器需要使用其名称+ Filter来指定。原因是,每当您为模块注册过滤器时,Angular都会Filter在其名称后面附加一个注册它。

  • 本文向大家介绍AngularJS 单元测试服务,包括了AngularJS 单元测试服务的使用技巧和注意事项,需要的朋友参考一下 示例 服务编号 考试 跑!

  • 问题内容: 正如我们在http://docs.angularjs.org/tutorial/step_07中看到的那样, 建议通过e2e测试来完成路由测试, 但是,我认为’$ routeProvider’配置是通过单个函数function($ routeProvider)完成的,我们应该能够在不涉及浏览器的情况下进行单元测试,因为我认为路由功能不需要浏览器DOM。 例如, 当url为/ foo时,

  • 问题内容: 有没有之间的功能差异和? 在使用和在控制器被使用。 在HTML中,我将使用: 而在函数中,我将使用类似: 那么,是还是在之后添加一些内容?假设当前状态为。 问题答案: 和之间没有 功能上的 区别。参阅文件 激活状态 激活状态有三种主要方法: 致电。高级便利方法。 单击包含指令的链接。 导航到与状态关联的状态。 因此,这些操作最终都将执行相同的操作,正如我们在指令代码中所看到的: 它确实

  • 本文向大家介绍AngularJS 单元测试组件(1.5+),包括了AngularJS 单元测试组件(1.5+)的使用技巧和注意事项,需要的朋友参考一下 示例 组件代码: 考试: 跑!

  • 本文向大家介绍AngularJS 单元测试控制器,包括了AngularJS 单元测试控制器的使用技巧和注意事项,需要的朋友参考一下 示例 控制器代码: 考试: 跑!