2014-01-27 102 views
2

我正嘗試使用摩卡在我的webapp上設置單元測試。我的webapp使用AngularJs,由於我仍然不熟悉這個框架,所以我很難設置它。在AngularJs應用程序中使用Mocha設置單元測試

事實上,有沒有辦法通過使用摩卡咖啡以外的其他東西來設置此功能?我的意思是,是否可以在沒有Karma或任何其他測試運行器(並且沒有瀏覽器)的情況下設置我的單元測試?

這裏是我的代碼進行測試:

define(['angular'], function (angular) { 
var module = angular.module('MyModule', []); 

module.controller('MyController', ['$scope', '$window', function ($scope, $window) { 
     $scope.test = function() { 
      $window.alert('Not implemented yet.'); 
     }; 
    }]); 

    return module; 
}); 

這是我的測試代碼:

require("chai"); 
require('../lib/angular/angular-mocks'); 

describe("Unit testing example", function() { 

    beforeEach(angular.mock.module('MyModule')); 

    it('should test nothing', function() { 
     expect(true).to.be.true; 
    }) 

}); 

當我嘗試執行此,我收到此錯誤:

angular.mock = {}; 
^ 
ReferenceError: angular is not defined 

謝謝你的幫助!

+0

不幸的是,我敢肯定,我會需要設置因緣或其他測試運行,使這個工作的原因沒有做這個(或通過瀏覽器運行)時,DOM將不存在,這是必需的。 糾正我,如果這是錯誤的;) – Jeep87c

+1

我沒有解決在我的答案,但你的''beforeEach''看起來可疑。 'beforeEach''接受一個函數作爲參數。 angular.mock.module('MyModule')是否返回一個函數?''beforeEach''可以使用的一個? – Louis

回答

4

是的,你需要一些能爲你的Angular代碼提供某種瀏覽器環境的東西。有多種選擇:

  • jsdom

  • 像PhantomJS這樣的無頭解決方案。

  • 實際的瀏覽器。

這些解決方案中的每一個都提供了逐漸接近「真實事物」的瀏覽器環境。

正是你需要什麼取決於:

  • 即最低AngularJS需要。我不使用AngularJS,所以我不知道這個最小值是多少。

  • 你自己的代碼需要什麼最小值你的

例如,我已經使用jsdom進行單元測試,以查找在DOM樹上下導航的代碼。 Jsdom對此非常完美。但是,當我嘗試使用jsdom測試使用MutationObserver的代碼時,由於jsdom不提供此API,所以無法正常工作。我不得不使用真實的瀏覽器來執行這些測試。

請注意:如果您關心跨瀏覽器兼容性什麼也沒有替代對實際瀏覽器的測試代碼。就在昨天,我診斷出在Safari中發生的只有的問題。沒有辦法使用Safari以外的任何其他方法來檢測這個問題來測試有問題的代碼。

+3

我終於來到這個解決方案:Grunt,karma和phantomJs。在我的情況下玩jsDom和AngularJs不是一個好主意。謝謝! – Jeep87c

相關問題