2015-09-04 87 views
1

我有一些JavaScript,我正在测试Jasmine。在这个时候,我的套房之一是这样的:在Jasmine中生成测试

var library = require('../library'); 

describe('My App -', function() { 
    afterEach(function(done) { 
     // some clean up code goes here 
     library.cleanUp(done); 
     done();  
    }); 

    describe('Test Operation 1 -', function() { 
     beforeEach(function(done) { 
     library.init(done); 
     }); 

     it('should load fine', function() { 
     if (library) { 
      expect(true).toBe(true); 
     } else { 
      expect(false).toBe(true); 
     } 
     }); 

     var parameters = [1, 8.24, -1]; 
     var results = [5, 4, 0]; 

     // [TODO]: Create tests here 
    }); 
}); 

有我产生从我parametersresults阵列规格的方法吗?换句话说,在运行时,我会实质类似的动态运行:

it('should be 5 when parameter is 1', function(done)) { 
    var result = library.calculate(1); 
    expect(result).toBe(5); 
    done(); 
}); 

it('should be 4 when parameter is 8.24', function(done) { 
    var result = library.calculate(8.24); 
    expect(result).toBe(4); 
    done(); 
}); 

it('should be 0 when parameter is -1', function(done) { 
    var result = library.calculate(-1); 
    expect(result).toBe(0); 
    done(); 
}); 

我不想如下:

it('should test the parameters', function() { 
    for (var i=0; i<parameters.length; i++) { 
    var result = library.calculate(parameters[i]); 
    expect(results[i]).toBe(result); 
    } 
}); 

我试图弄清楚如何动态地在运行时生成一些测试。

谢谢!

+1

如果与循环您的问题是这些信息并不足够具体,您可能需要查看茉莉花自定义消息(github上的库)。它允许你有一个自定义/确切的消息,但在循环内。 – ktharsis

+0

''''''''''''''''''可以放在'for'循环中,因此您将在它们中的每一个中都有单个期望的多个规格,而不是一个具有多个期望的规格(就像它在最后的代码示例中一样)。 “it”的标题也可以动态创建,具体取决于当前的循环迭代。 –

+0

@MichaelRadionov有什么方法可以在'eval'中放一个'it'?如果是这样,怎么样? –

回答

7

基于@迈克尔Radionov的评论,你可以使用的动态测试用例生成loop.Sample代码中动态生成测试用例提供如下:

describe("Generating Tests with Jasmine",function(){ 
     //var parameters = [1, 8.24, -1]; 
     //var results = [5, 4, 0]; 

     var tests = [ 
      {parameter: 1,  result: 5}, 
      {parameter: 8.24, result: 4}, 
      {parameter: -1, result: 0} 
     ]; 

     tests.forEach(function(test) { 
      it('should be ' + test.result + ' when parameter is '+test.parameter, function(done) { 
       var result = library.calculate(test.parameter); 
       expect(result).toBe(test.result); 
       done(); 
      }); 
     }); 

    }); 
+0

我也可以异步添加它们吗? – tomalec

+0

这在清理测试主干应用程序中的触发器和listenTos之间的链接方面效果很好。 –