我試圖窺探在控制器中定義的方法工作,但無論我做什麼,我看到測試失敗與消息:間諜不是角,茉莉花和興農
Error: Expected a spy, but got Function.
我使用Karma,Jasmine和Sinon與Angular一起。我非常確定事情的設置是否正確,因爲剛剛讀取$ scope範圍內的屬性的測試通過。
例如,我有這個非常簡單的應用程序模塊:
angular.module('app', []);
而這個簡單的控制器:
angular.module('app').controller('myController', ['$scope', function($scope) {
$scope.test = '';
$scope.setTest = function (newString) {
$scope.test = newString || 'default';
}
$scope.updateTest = function (newString) {
$scope.setTest(newString);
};
}]);
我的規格文件如下:
describe('myController', function() {
'use strict';
beforeEach(module('app'));
var $scope, sandbox;
beforeEach(inject(function ($controller) {
$scope = {};
$controller('myController', { $scope: $scope });
sandbox = sinon.sandbox.create();
}));
afterEach(function() {
sandbox.restore();
});
describe('#updateTest()', function() {
beforeEach(function() {
sandbox.spy($scope, 'setTest');
});
it('updates the test property with a default value', function() {
$scope.updateTest();
expect($scope.test).toEqual('default');
});
it('calls the setTest method', function() {
$scope.updateTest();
expect($scope.setTest).toHaveBeenCalled();
});
});
});
第一個測試(它只是檢查測試屬性會得到你通過)。
第二個測試,我只是想窺探setTest()
方法,失敗並顯示上面的錯誤消息。
如果我註銷$scope
在beforeEach
我可以看到setTest
方法,並且沒有腳本錯誤。
我錯過了什麼?
輝煌,我忘了這個包!我將安裝它並嘗試使其工作。我以前面例子中的方式使用了Karma/Jasmine/Sinon,但我並沒有參與設置.... – danwellman
是的,就是這樣,謝謝先生!另外,我必須通過將它添加到Karma加載的文件列表中來加載Karma中的文件。 – danwellman