gpt4 book ai didi

使用 jasmine 在 angularJS 中注入(inject)服务测试 Controller

转载 作者:行者123 更新时间:2023-11-28 19:44:49 25 4
gpt4 key购买 nike

我正在尝试了解如何使用 jasmine 和 angularJS 测试我的代码。我写了一个带有 Controller 和注入(inject)服务的测试项目。现在我想测试 Controller 并尝试模拟注入(inject)的服务。但是我没有找到一种方法来从我的 Controller 测试“Arrived”功能。这是我的 jsfiddle: http://jsfiddle.net/2fwxS/

controller.js:

angular.module('myApp.controllers', [])
.controller('MyCtrl', ['$scope', 'MyService', function ($scope, MyService) {
$scope.User = {};
$scope.HasUserArrived = false;
$scope.Arrived = function(firstname, lastname) {
$scope.HasUserArrived = MyService.Arrive(firstname, lastname);
return $scope.HasUserArrived;
}
}]);

services.js:

var myApp = angular.module('myApp.services', []).
value('version', '0.1');

myApp.factory('MyService', [function () {
return {
HasArrived: false,
Arrive: function (firstname, lastname) {
this.HasArrived = false;

if (firstname && lastname) {
this.HasArrived = true;
}

console.log("User has arrived: " + this.HasArrived);
return this.HasArrived;
}
}
}]);

我发现了一些类似的解释,其中 $provide 可能是正确的解决方案 ( How can I write jasmine test for angular controller and service like this? ) 或 createSpy ( How do you mock Angular service that is a function? ) 但我无法理解何时需要 $provider.factory 或 $provider.value 或何时我应该使用 createSpy 吗?

如果有人可以帮助我理解差异并在我的 jsFiddle ( http://jsfiddle.net/2fwxS/ ) 示例中启动并运行停用代码,我将不胜感激...

最佳答案

您应该使用 $provide.value 来用模拟服务实例替换原始服务实例:

beforeEach(module(function($provide) {
var service = {
Arrive: function (firstname, lastname) {
if (firstname && lastname) {
return true;
}
}
};
$provide.value('MyService', service);
}));

我真的不知道为什么 $provide.value 有效而 $provide.factory 无效。稍后我将尝试查看 Angular 代码,以便弄清楚。如果我发现了什么,我会更新这个答案。

关于 spy ,如果你想测试你的模拟是否按照它们应该的方式使用,你应该使用它们。这包括检查参数和调用。这是您的代码更改为使用 spy :

it('checks that Arrived is correctly used', function() {
// Arrange
spyOn(service, 'Arrive');

// Act
scope.Arrived('Franz', 'Kafka');

// Assert
expect(service.Arrive).toHaveBeenCalledWith('Franz', 'Kafka');
});

这是您的固定 jsFiddle .

关于使用 jasmine 在 angularJS 中注入(inject)服务测试 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com