我在angularJS中测试一个简单的服务时遇到了问题,在阅读了十几个教程和文章后,我的代码没有问题,也许你可以帮助我一点。
我的服务非常简单,所以我不必担心它的代码。它是一个getter / setter服务,包含以下代码:
app.service("GetterSetterService", function() {
item = "";
return {
get: function() {
return item;
},
set: function(value) {
item = value;
}
}
});
当" app"已定义如下:
var app = angular.module('myTestApplication', ["ngMock"]);
我使用Jasmine的测试代码如下:
"use strict";
describe("GetterSetterService", function() {
var service;
beforeEach(inject(function(_GetterSetterService_) {
service = _GetterSetterService_;
}));
it("correctly defines the service", function() {
expect(service).not.toBeUndefined();
expect(service).not.toBeNull()
});
it("has a default value if no value has been set", function() {
expect(service.get()).toBe("");
});
it("correctly sets a value", function() {
service.set("newValue");
expect(service.get()).toBe("newValue");
});
});
但是,如果我留下痕迹,它永远不会通过"注入"回调,因此没有注入服务,并且没有正常工作。有没有人知道什么是错的?我没有得到它,我变得绝望。
谢谢你的时间!
答案 0 :(得分:0)
这是完整的测试吗?如果是这样,那么您就错过了应用程序定义的加载。 E.g。
beforeEach(module('myTestApplication'));
此外,您不需要将ngMocks
注入实际应用程序 - 这只涉及模拟测试,因此您只能将其放在karma.conf.js
文件中。
基于以上所述,我认为在测试时你的理解是微不足道的。你需要:
beforeEach
语法加载模块,如上所述