【发布时间】:2014-03-25 21:47:17
【问题描述】:
我有两个要测试的函数;一种仅在“现代浏览器”中运行,另一种仅在“旧”浏览器中运行。
我使用 Jasmine 作为我的测试框架和 Karma 来运行我的测试。 Karma 将启动许多运行所有测试的浏览器。
我的问题是在所有浏览器中测试我的所有功能会导致一些测试失败。例如,测试一个只能在现代浏览器中运行的函数在 IE8 中测试时会失败。
要测试的代码:
function getStuffFromSmartBrowser() {
return 'foo';
}
function getStuffFromNotSoSmartBrowser() {
return 'bar';
}
if ('intelligence' in browser) {
getStuffFromSmartBrowser();
} else {
getStuffFromNotSoSmartBrowser();
}
原始测试代码:
describe("A suite", function () {
it("for smart browsers", function () {
expect(getStuffFromSmartBrowser()).toEqual('foo');
});
});
describe("A suite", function () {
it("for not so smart browsers", function () {
expect(getStuffFromNotSoSmartBrowser()).toEqual('bar');
});
});
在这些测试用例中,一个测试在一种类型的浏览器中会失败,而另一个测试在另一种类型的浏览器中会失败。
替代测试代码:
describe("A suite", function () {
if ('intelligence' in browser) {
it("for smart browsers", function () {
expect(getStuffFromSmartBrowser()).toEqual('foo');
});
} else {
it("for not so smart browsers", function () {
expect(getStuffFromNotSoSmartBrowser()).toEqual('bar');
});
}
});
替代测试代码在所有经过测试的浏览器中运行良好。
问题:
A - 在测试中使用条件语句是一种好习惯吗?
B - 如果不是,什么是更好的方法?
【问题讨论】:
-
在你的测试中有条件是不好的。测试中的分支通常被认为是代码异味。你最好断言
browser == LegacyBrowser || realTestCondition之类的东西。如果测试不应该在旧版浏览器上运行,这将导致短路。
标签: javascript testing jasmine