2013-06-24 50 views
2

我对单元测试的概念很陌生,我试图设置一个简单的测试。我正在处理的平台要求所有的JavaScript首先用CoffeeScript编写。我已经阅读了很多关于如何完成这个任务的例子,但是我的测试不断失败。使用CoffeeScript和Karma测试AngularJS控制器的单元

这里是我的控制器是什么样子:

'use strict' 

angular.module('test') 
    .controller 'BasicController', ['$scope', '$location', ($scope, $location) -> 

    $scope.page.title = "Page Title" 

    $scope.$watch(
     () -> 
     return $location.url() 
    ) 

    ] 

这里是我的测试脚本的样子:

'use strict' 

describe "The Basic Controller", -> 

    beforeEach(module('test')) 

    scope = {} 
    location = {} 
    ctrl = {} 

    beforeEach inject ($rootScope, $controller, $location) -> 
    scope = $rootScope.$new() 
    location = $location 
    ctrl = $controller("BasicController", {$scope: scope}) 

    it "should have the correct title", -> 
    expect(scope.page.title).toBe("Page Title") 

我使用PhantomJS和错误信息,我得到的是, scope.page.title对象未定义。我不明白为什么会发生这种情况。我将该变量设置为测试正在检查的值,我很难理解为什么它没有通过。任何帮助或指导将不胜感激。我不知道如果我在CoffeeScript语法中犯了一个错误(更重要的是使用JavaScript编码),或者我完全忘记了一些东西。

+0

想通了......我试图引用的页面对象是在其他地方声明的。这个例子是从多个开发人员正在开发的一个平台中抽象出来的。解决方案只是简单地将页面对象设置为空,并且测试成功通过。欢呼 –

+8

请让这个自己的答案,让其他人知道这个问题已经解决。 – matsko

回答

1

正如上面指出:

想通了......我试图引用页面对象在别处声明。这个例子是从多个开发人员正在开发的一个平台中抽象出来的。解决方案只是简单地将页面对象设置为空,并且测试成功通过。