Javascript 茉莉花服务行为
我有几个jasmine测试套件,其中一些使用我实现的服务。Jasmine中的服务行为是什么。我注意到,当我对我的服务运行一些测试时,我所做的会影响到其他单元测试。我们知道这不可能发生,因为单元测试必须是完全独立的。i、 eJavascript 茉莉花服务行为,javascript,angularjs,jasmine,Javascript,Angularjs,Jasmine,我有几个jasmine测试套件,其中一些使用我实现的服务。Jasmine中的服务行为是什么。我注意到,当我对我的服务运行一些测试时,我所做的会影响到其他单元测试。我们知道这不可能发生,因为单元测试必须是完全独立的。i、 e it('Given my service with list populated when cleanList then getList return empty list', function(){ myService.populateList(_myData_);
it('Given my service with list populated when cleanList then getList return empty list', function(){
myService.populateList(_myData_);
expect(myService.getList().length).toBe(5);
myService.cleanList();
expect(myService.getList().length).toBe(0);
expect(myService.getList()).toEqual([]);
});
如果我在另一个完全不同的JS脚本文件中的其他描述中的另一个测试之前执行该测试,那么我的其他测试将失败,因为我希望使用填充的列表,但该测试已经清除了它。这里的服务是否与我的应用程序中的服务相同?我可以为每个套件创建这些服务的独立实例吗
这就是我使用这些服务的方式
(function(){
'use strict';
var _data_ = require('../../../../json/dataMock.json');
fdescribe('MyApp wizard:', function(){
var controller, createController;
var modalInstance = { close: function(){}, dismiss: function(){} };
var myService;
beforeEach(function(){
angular.mock.module('myapp.ui.apps.wizard');
angular.mock.module('myapp.ui.apps.wizard.service');
});
beforeEach(inject(function($injector, $controller, $rootScope, _$sce_, _myService_){
myService = _myService_;
createController = function() {
return $controller('MaintenancesWizardController', {
$rootScope: $rootScope,
$uibModalInstance: modalInstance,
data: _data_,
$sce: _$sce_,
myService: _myService_
});
}
}));
it('this test fails if the one before is executed', function(){
controller = createController();
expect(myService.getList().length).toBe(5);
});
几个小时后我才发现发生了什么。我使用require导入模拟数据。当我使用几个导入时,我不记得数据存储在内存中。因此,我在服务中的内部arrayList指向与我的另一个描述套件相同的内存。我对相同的.json模拟数据文件使用了import。我将改变这个,并使用“fs”来阅读它。从现在起,我建议在这些情况下避免使用require。您是否正在尝试测试myservice?你可以在你的服务中使用间谍,这样它就不会真正调用该服务并更改其值。@MukulJayaprakash我刚刚发现了发生的事情!读我的答案