【发布时间】:2014-08-22 12:09:09
【问题描述】:
我正在为 Angular.js 应用程序(使用 karma 和 jasmine)编写单元测试,并且我想在模块的 CONFIG 阶段测试某种行为。我想确认正在调用 PROVIDER 的某个函数。我认为我可以在提供者的方法上使用 spy 来做到这一点,但是在“预期”被证明相当棘手之前获得对提供者的访问权限。 下面是一些示例代码:
模块代码(正在测试)
var myApp = angular.module('myApp', ['restangular']);
myApp.config(['RestangularProvider', function (RestangularProvider) {
RestangularProvider.setBaseUrl('http://someurl:someport/');
}]);
我尝试了各种解决方案来获取对 RestangularProvider 的引用并对其应用间谍,但都失败了。我能得到的最接近的是下面的代码:
单元测试代码
describe("Test if setBaseUrl was called", function () {
var RestangularProvider;
beforeEach(module('myApp', function(_RestangularProvider_) {
RestangularProvider = _RestangularProvider_;
spyOn(RestangularProvider, "setBaseUrl").and.callThrough();
}));
it("should call setBaseUrl.", function() {
expect(RestangularProvider.setBaseUrl).toHaveBeenCalled();
});
});
我确实得到了对 RestangularProvider 的引用,但是模块的“配置”函数在此之前被调用,所以我认为间谍没有得到设置。
我确实找到了一篇文章,其中作者通过测试配置的“服务”而不是测试对提供者方法的实际调用来解决类似的情况。在上面的示例中,我将在我的期望中测试Restangular.configuration.baseUrl,而不是测试对提供者的setBaseUrl 方法的实际调用,但这似乎在某些情况下是不够的。
我对 Angular.js 比较陌生,所以这可能只是对整个“测试配置阶段”一无所知的情况,所以如果是这种情况,请随时让我直截了当:]
有什么建议、批评或指点吗?
【问题讨论】:
标签: javascript angularjs unit-testing karma-jasmine