我的控制器看起来像这样
angular.module('demo').controller('demoCtrl',['$scope','$modal', function($scope, $modal){
$scope.askForInput = function(action){
var modalInstance = $modal.open({
/* here i open a modal and display a form to get some input */
});
modalInstance.result.then(function(input){
/* process the input here */
});
};
}
我感到困惑的部分是如何测试这段代码,即测试模式是否已打开,表格是否已填充且数据是否已在此控制器中收到?
我正在使用茉莉花,并且我自己被困在第一行。
答案 0 :(得分:0)
我不建议您测试$modal
,而是推荐demoCtrl
,特别是askForInput
做它应该做的事情。当您在测试中创建控制器时,可以为$scope
和$modal
注入模拟值。因为您正在注射模拟,所以您可以完全控制它们的行为方式。
例如,您可以执行以下操作:
// dependencies
var $scope, $modal, controller;
// test values
var modalOpenInput, modalInstance;
beforeEach(module("demo"));
beforeEach(inject(function($rootScope, $controller) {
$scope = $rootScope.$new();
modalInstance = {
result: {
then: function(callback) {
// define what to do here...
}
}
};
$modal = {
open: function(input) {
// by storing this you're able to later
// confirm it's value was set
modalOpenInput = input;
return modalInstance;
}
};
controller = $controller("demoCtrl", {
$scope: $scope,
$modal: $modal
});
}));
it("should do what it's supposed to do...", function() {
$scope.askForInput();
// test the function works as defined...
expect(modalOpenInput).toBeDefined();
// etc...
});
希望这可以让您了解如何向前发展。您甚至可以根据输入定义多个路径,并验证每个路径是否按定义工作。由于您可以访问模拟,因此您可以定义$modal
及其所有功能的行为。