如何在Jasmine JS中重用beforeEach/afterEach
How to reuse beforeEach/afterEach in Jasmine JS?
使用JasmineJS编写测试时,我有许多测试都有类似的beforeEach/afterEach代码。
有没有一种方法可以使用JasmineJS测试套件实现继承模型?
我可以将所有测试分组在一个describe
中,但在这种情况下,我将以一个包含所有测试的巨大JS文件结束。
我想把测试分成每一页。
这里有一个例子:
describe('Services Page', function() {
beforeEach(function() {
login_as_admin()
})
beforeEach(function() {
browser().navigateTo('/services')
})
if('Some test for services page', function() {})
afterEach(function() {
logout()
})
})
describe('Administrators Page', function() {
beforeEach(function() {
login_as_admin()
})
beforeEach(function() {
browser().navigateTo('/administrators')
})
if('Some test for administrators page', function() {})
afterEach(function() {
logout()
})
})
我认为这在这篇博客文章中得到了部分检查,也在这里得到了回答,但我为您的示例添加了一个经过调整的答案:
可重复使用代码:
function sharedSetup(startPage) {
beforeEach(function() {
login_as_admin();
browser().navigateTo(startPage);
});
afterEach(function() {
logout();
});
};
如何使用:
describe('Services Page', function() {
sharedSetup('/services');
it('Some test for services page', function() {});
});
describe('Administrators Page', function() {
sharedSetup('/administrators');
it('Some test for administrators page', function() {});
});
如果要为所有套件执行此操作,可以在topSuite
:中注册beforeEach
或afterEach
函数
jasmine.getEnv().topSuite().beforeEach({fn: function() {
//log in as admin
}});
如果您只想将其应用于某些套件,则可以使用子套件:
describe("as_admin", function() {
beforeEach(function() {
//log in as admin
});
describe('Services Page',function() {...});
describe('Administrators Page',function() {...});
}
Jasmine允许您将beforeEach
和afterEach
放在describe
调用之外。通过这种方式,您可以对所有规格进行全局设置和拆卸。您的logout()
调用似乎是全局拆卸的一个很好的候选者,如果您的所有规范都以管理员身份登录,您也可以将其转移到全局范围。
对于某些(但不是全部)规范中使用的东西,拥有像login_as_admin()
这样的方法似乎是将逻辑整合在一个地方的最佳方式。
参考:(Pivotal Labs博客:Davis W.Frank)
他描述了在一个函数中收集共享功能,该函数使用不同单独套件的参数进行调用。在每个套件中调用此函数将执行通用设置/配置。
关于在文件之间拆分测试;如果测试是基于浏览器的,则具有共享功能的文件可以包含在具有<script>
标记的每个页面中,或者如果测试是以节点为基础的,则可以包含在顶部附近的require(...)
中。然后,您可以独立运行测试,但使用仅定义一次的共享设置。
在问题中找到。
因此,在3.7.0中,
afterEach
和其他方法一起从Env
命名空间中移出,进入Globals。测试.ts中的调用现在应该是:
afterEach(() => {});
就是这样。
- Mocha 的 beforeEach() 和 done() 函数不起作用
- 在jasmine描述函数中,自动向beforeEach和afterEach添加代码
- beforeEach 不会在模块化 QUnit/Sinon 测试中使用 CoffeeScript 中的 Require.
- 如何为 Jasmine/Angular 创建一个帮助程序来组合多个 beforeEach
- 如果“beforeEach”中的代码是异步的,如何在 Jasmine 中测试方法
- `beforeEach` Behavior with Nested Tests in Intern
- 如何在Jasmine JS中重用beforeEach/afterEach
- Jasmine 2.0 async beforeEach不等待async完成
- 使用Jasmine进行单元测试:测试没有看到beforeEach()中的代码's spyOn()
- 你能在beforeEach中有多个spyObjs吗?
- 如何在vue-router's beforeEach中使用vue-router's的动作?
- 全局BeforeEach,用于用Mocha和Angular模拟HTTP请求
- js测试bail(false)对beforeEach不起作用
- 在beforeEach期间将vuex模块状态传递给vue-router
- 在Mocha的afterEach钩子中检测测试失败
- 茉莉'在测试我的REST API时,s afterEach似乎在beforeEach之前运行
- (窗口.beforeEach || window.setup)不是一个函数
- JSHint警告Mocha 'beforeEach'即使使用"mocha": tru
- 摩卡测试没有按正确的顺序运行,使用before/beforeEach
- 在mocha.js和chai.js中基本但正确地使用beforeEach()或afterEach()