Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度服务的简单单元测试_Angularjs_Angularjs Scope_Jasmine_Karma Jasmine_Angular Services - Fatal编程技术网

Angularjs 角度服务的简单单元测试

Angularjs 角度服务的简单单元测试,angularjs,angularjs-scope,jasmine,karma-jasmine,angular-services,Angularjs,Angularjs Scope,Jasmine,Karma Jasmine,Angular Services,我有一个角度服务,它接收一个数字N(介于1-12之间),并返回最大为12-N的整数之和: app.value('myNumberService', { calculateValue: function (n) { var empty = []; for(var i = 0; i < 12 - n; i++){ empty.push(i); } return empty; } }); 我

我有一个角度服务,它接收一个数字
N
(介于1-12之间),并返回最大为
12-N的整数之和:

app.value('myNumberService', {
    calculateValue: function (n) {
        var empty = [];
        for(var i = 0; i < 12 - n; i++){
            empty.push(i);
        }
        return empty;
    }
});
我收到这个错误:

PhantomJS 1.9.8 (Windows 7) app *Validating myNumberService service encountered a declaration exception FAILED
    TypeError: 'undefined' is not an object (evaluating 'service.calculateValue')

感谢您的帮助。

我不知道您的测试乍一看失败的原因。然而,它有很多可以改进的东西(中间的某个地方可能是错误的地方)。以下是我如何为该模块编写单元测试:

describe('app', function () {

    var myNumberService;

    beforeEach(module(this.description));    // this.description === 'app'

    beforeEach(inject(function (_myNumberService_) {
        myNumberService = _myNumberService_;    // see documentation for `angular.mock.inject`
    }));

    describe('myNumberService', function () {

        it('calculates ...', function () {
            expect(myNumberService.calculateValue(...)).toBe(...);
        });
    });
});
正如您所看到的,我实际上并没有在那个里测试服务的存在。这是因为如果服务不存在,需要注入服务的测试将失败,并出现一个可以理解的错误。单元测试应该明确测试单元的功能;将隐式测试代码的基本完整性。再举一个例子,您不会测试
calculateValue
是否是一个函数。(尝试将其用作函数的第一个测试将失败,如果不是函数,则“…不是函数”。)



奖金提示:
1+2+3+…+之和n
可以计算为
(n*(n+1))/2

非常有效,谢谢。遗憾的是,为了这么简单的问题,我不得不放弃50分。
describe('app', function () {

    var myNumberService;

    beforeEach(module(this.description));    // this.description === 'app'

    beforeEach(inject(function (_myNumberService_) {
        myNumberService = _myNumberService_;    // see documentation for `angular.mock.inject`
    }));

    describe('myNumberService', function () {

        it('calculates ...', function () {
            expect(myNumberService.calculateValue(...)).toBe(...);
        });
    });
});