首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用特定参数跟踪函数被调用的次数

如何使用特定参数跟踪函数被调用的次数
EN

Stack Overflow用户
提问于 2014-06-14 01:29:57
回答 1查看 1.8K关注 0票数 1

我正在尝试设置一个jasmine测试,而不仅仅是跟踪一个函数被调用了多少次。我想要跟踪一个函数被某个参数调用了多少次。

以下是我当前的测试规范:

代码语言:javascript
复制
describe('fizzBuzz', function(){
        beforeEach(function(){
            // console.log = jasmine.createSpy('log');
            spyOn(console, 'log');
            fizzBuzz();
        })

        it("should test for the fizzBuzz's console output", function () {
        expect(console.log).toHaveBeenCalledWith('FizzBuzz');
        });
        it('tracks how many times FizzBuzz is called', function(){
            expect(console.log.callCount).toEqual(6);
        });
    })

在我的第二个规范中,callCount等于console.log被调用的次数。我想用参数'FizzBuzz‘来跟踪它被调用了多少次。有没有办法把我的第一个规范和第二个规范链接起来?我已经尝试了很多变体,但都找不到解决方案。

下面是我想要测试的代码:

代码语言:javascript
复制
var fizzBuzz = function(){
    var start = 1;
    while(start <= 100){
        if(start % 3 === 0 && start % 5 === 0){
            console.log('FizzBuzz');
        } else if (start % 3 === 0){
            console.log('Fizz');
        } else if (start % 5 === 0){
            console.log('Buzz');
        } else {
            console.log(start);
        }
        start++;
    }
};

我使用console.log参数来确定代码是否正确。例如:如果使用参数FizzBuzz调用console.log每100次中有6次,他们的代码将遵守指导原则。

更新:

来自测试的当前错误:

代码语言:javascript
复制
fizzBuzz tracks how many times console.log('FizzBuzz') is called.
    ✘ TypeError: undefined is not a function
        at null.<anonymous> (http://localhost:7357/EJSLoops.js:31:43)
        at jasmine.Block.execute (http://localhost:7357/testem/jasmine.js:1064:17)
        at jasmine.Queue.next_ (http://localhost:7357/testem/jasmine.js:2096:31)
        at jasmine.Queue.start (http://localhost:7357/testem/jasmine.js:2049:8)
        at jasmine.Spec.execute (http://localhost:7357/testem/jasmine.js:2376:14)
        at jasmine.Queue.next_ (http://localhost:7357/testem/jasmine.js:2096:31)
        at onComplete (http://localhost:7357/testem/jasmine.js:2092:18)
        at jasmine.Spec.finish (http://localhost:7357/testem/jasmine.js:2350:5)
        at null.onComplete (http://localhost:7357/testem/jasmine.js:2377:10)
        at jasmine.Queue.next_ (http://localhost:7357/testem/jasmine.js:2106:14)
EN

回答 1

Stack Overflow用户

发布于 2014-06-14 02:10:17

代码语言:javascript
复制
var fizzBuzz = function(){
    var start = 1;
    while(start <= 100){
        if(start % 3 === 0 && start % 5 === 0){
            console.log('FizzBuzz');
        } else if (start % 3 === 0){
            console.log('Fizz');
        } else if (start % 5 === 0){
            console.log('Buzz');
        } else {
            console.log(start);
        }
        start++;
    }
};

describe('fizzBuzz', function(){
    beforeEach(function(){
        // console.log = jasmine.createSpy('log');
        spyOn(console, 'log');
        fizzBuzz();
    });

    it("should test for the fizzBuzz's console output", function () {
        expect(console.log).toHaveBeenCalledWith('FizzBuzz');
    });

    it("tracks how many times console.log('FizzBuzz') is called", function(){

        var callcount = console.log.calls.count();
        var paramcount = 0;
        for(var i = 0; i < callcount; i++){
            if(console.log.calls.argsFor(i) == 'FizzBuzz'){
                paramcount++;
            }
        }
        expect(paramcount).toEqual(6);

    });
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24210851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档