我有很多几乎相同的测试。为了 DRY 和可扫描性,我想将测试抽象为一个函数,然后用几个参数调用该函数。然后该函数将调用it
该规范并将其添加到套件中。
它似乎工作,除了规范没有以与其他规范相同的方式运行,并且beforeEach
没有在公共函数中定义的规范之前调用。
define(['modules/MyModule','jasmine/jasmine'], function(MyModule) {
describe('myModule', function() {
function commonTests(params) {
it('should pass this test OK', function() {
expect(true).toBe(true);
});
it('should fail because module is undefined', function() {
expect(module[params.method]()).toBe('whatever');
});
}
var module;
beforeEach(function() {
module = new MyModule();
});
describe('#function1', function() {
commonTests({
method: 'function1'
});
});
describe('#function2', function() {
commonTests({
method: 'function2'
});
});
});
});
有什么办法可以做到这一点并保持 and 的功能beforeEach
吗afterEach
?
更新:
看来我的例子错了,对不起。这是失败的情况:
define(['modules/MyModule'], function(MyModule) {
function commonTests(params) {
it('will fail because params.module is undefined', function() {
expect(typeof params.module).toBe('object');
expect(typeof params.module[params.method]).toBe('function');
});
it('has a few tests in here', function() {
expect(true).toBe(true);
});
}
describe('MyModule', function() {
var module;
beforeEach(function() {
module = new MyModule();
});
describe('#function1', function() {
commonTests({
module: module,
method: 'function1'
});
});
describe('#function2', function() {
commonTests({
module: module,
method: 'function2'
});
});
});
});
我认为它失败了,因为值module
被保留为调用的一部分,而不是像第一个示例commonTests
中那样始终使用当前值。module
当我到达那里时,我会发布我的解决方案......