javascript - 将模拟 $state 注入(inject) Angular 单元测试

标签 javascript angularjs unit-testing angular-ui-router

我在 Angular 单元测试方面相对较弱,并且正在努力引导我认为简单的单元测试。

我的类(class)

class CampaignController {
    constructor($state) {
        this.$state = $state;
    }

    submit() {
        this.$state.transitionTo('some.state');
    }
}
export { CampaignController };

我的测试

import { expect } from 'chai';
import angular from 'angular';
import { CampaignController } from './campaign.controller';

let component;

describe('campaign-controller', function() {

    var $state;

    beforeEach(inject(function (_$state_) {
        $state = _$state_;
        component = new CampaignController($state);
    }));


    it('should update state on submit', () => {
        component.submit();
        expect($state.current.name).to.be('some.state');
    });
});

我最终收到此错误

Error: [$injector:unpr] Unknown provider: $stateProvider <- $state

我在这里缺少什么?

最佳答案

您没有在 beforeEach 中加载任何模块,因此 Angular-ui 路由器不可用。至少,您需要加载 ui.router 模块。

例如,您的 block 之前可能有一个单独的 beforeEach block :

beforeEach(module('ui.router'));

beforeEach(inject(function (_$state_) {
    $state = _$state_;
    component = new CampaignController($state);
}));

关于javascript - 将模拟 $state 注入(inject) Angular 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36635542/

相关文章:

c# - 为什么不使用 async/await 关键字时异步单元测试会失败?

javascript - 当您打开 Popover [bootstrap] 时,屏幕失去焦点并转到顶部

javascript - 即使字段名为 "submit",也以编程方式提交函数

javascript - 在 Javascript 中从 React Native 调用 Native Java 方法

javascript - 将字符串中的出现位置替换为结果

javascript - Angular : Cannot retrieve value of ng-model when ng-minlength is not satisifed

javascript - 在 ng-repeat block 中无限调用函数

javascript - ng-options 不适用于基本情况

c - 在对共享库进行单元测试时,如何用模拟实现替换函数?

python - pytest-testmon 在写入结果期间因 TypeError 失败