2014-01-07 3 views
25

저는 Teasoon을 통해 Jasmine을 사용하여 Angular로 단위 테스트를 만들려고합니다. 테스트가 진행되고 있지만 실패한 컨트롤러의 존재를 테스트하기위한 간단한 테스트 만 있습니다. 다음과 같은 테스트 설정이 있습니다.각도 모의`module` 결과는 '[Object object]는 함수가 아닙니다'

//= require spec_helper 

require("angular"); 
require("angular-mocks"); 
var app = require("./app"); 


describe("My App", function() { 

    describe("App Controllers", function() { 

    beforeEach(module("app")) 

    it("Should have created an application controller", inject(function($rootScope, $controller){ 
     var scope = $rootScope.$new(); 
     ctrl = $controller("ApplicationCtrl", { $scope: scope }); 
    })); 

    }) 

}) 

는 문이 내 의존성을 처리 Browserify에 의해 처리됩니다 필요로하지만, 나는 또한 사양 도우미에 대한 사용하고 톱니에 연결할 수 있습니다. 요구되는 응용 프로그램 내부

, 나는

require("angular"); 
var controllers = require("./controllers"); 

var app = angular.module("app", [ 
    "app.controllers" 
]); 

exports.app = app; 

이 나는이 테스트를 실행할 때, 나는 다음과 같은 오류가 나는 내려고 꽤을 썼다

Failure/Error: TypeError: '[object Object]' is not a function (evaluating 'module("aialerts")') 

을 생산 얻을 이 밖에도 무슨 일이 벌어지고 있는지 전혀 모른다. 어떤 도움을 주셔서 감사합니다.

+0

는'var에 응용 프로그램 =이 ("./ 응용 프로그램을") 필요가 :

beforeEach(module("app")) 

에이 줄을 변경? – dcodesmith

+0

예. 방금 그 파일의 내용을 게시했습니다 :) – PaReeOhNos

+0

나는 browserify와 그 이상한 것들에 대해 전혀 몰라요. 하지만 그런 식으로 테스트에 앱을로드 할 필요는 없습니다. 밖으로 요구에 무엇이 일어나는가? –

답변

80

동일한 문제가있었습니다. `로드`각도 app` 모듈;

beforeEach(angular.mock.module("app")) 
+1

angular.mock.module은 충분합니다, 전에 창을 넣을 필요가 없습니다 – Capaj

+0

이것을 테스트 할 수 없었습니다. 나는 일자리를 바꾸었지만 그것이 옳다고 생각할 것이다. – PaReeOhNos

+1

테스트에서 엄격 모드를 사용한다면'window' 접두사를 추가하는 것이 효과가 없을 것이다. 다른 사람들처럼'angular.mock' 접두사를 붙이십시오. – demisx

24

Browserify는 노드 스타일 module 당신이 기능 내보내는 데 사용할 수있는 객체입니다 require, 사용

console.log(module); // {exports: {}} 

각-mocks.js이 window.module에 함수를 연결하는 시도를하지만 Browserify에 불가능 /마디.

angular-mocks source을 살펴보면, module 기능을 angular.mock에 연결하는 것처럼 보입니다. 따라서 글로벌 module 개체를 사용하는 대신 angular.mock.module을 사용해야합니다.