testing - 使用 Angularjs 和 requirejs 时在测试中注入(inject)

标签 testing mocking angularjs requirejs inject

我目前正在尝试将 AngularJS 与 RequireJS 一起使用,但我不知道如何使用注入(inject)进行测试。 没有 RequireJS 我们可以,

实现

PhoneListCtrl.$inject = ['$scope', '$http'];  
var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { 
    /* constructor body */ 
}];  

测试

beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
  $httpBackend = _$httpBackend_;
  $httpBackend.expectGET('phones/phones.json').
      respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
  scope = $rootScope.$new();
  ctrl = $controller(PhoneListCtrl, {$scope: scope});
}));  

然而,当我们使用 RequireJS 时,我们可以定义 Controller 如下,

demoController.js

define(["dependency"], function() {
    /* constructor body */ 
});

当使用这个 Controller 时,我们将它添加为依赖项之一并且没有变量声明。(让我以“Controller”为例,因为我们最好称它为“Service”)

一些JS.js

define(["demoController"], function(controller) {
     controller.method();
});

我的问题
我们如何在使用 RequireJS(AMD) 时将 $http、$scope(或其他东西)注入(inject)目标 Controller 或服务以进行测试?

如有任何帮助,我们将不胜感激。

最佳答案

我做过类似的事情:

/*global define, document */

define(['angular', 'jquery'], function (angular, $) {
    'use strict';

    return function () {
        var $injector = angular.bootstrap(document, ['myApp']);
        var $controller = $injector.get('$controller');
        var myController = $controller('myController');
    };
});

想法是 angular.bootstrap 返回一个注入(inject)器,它允许您获取服务。

关于testing - 使用 Angularjs 和 requirejs 时在测试中注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13991982/

相关文章:

javascript - 如何在 AngularJS 中预取图像?

java - 主类在 JUnit 线程错误中运行异常

javascript - 使用 NodeJS/AngularJS 创建到 MySQL 的 RESTful API 桥

testing - 通过 "npm install"安装时找不到 Testcafe 命令

c# - 暂时设置DbContext的CommandTimeout

java - 如何在java protected 方法中测试局部变量

未调用python模拟函数

javascript - 如何通过ajax调用导航到跨域网页?

testing - 确定随机数测试的测试统计量和分布

python - 如何让每个TestCase在setUp后都调用一个hook?