我正在开发一个循环浏览大量图片的jQuery插件。我正在编写一些测试,并希望测试src属性是否应该始终被更改。麻烦的是
因此,有时由于原始图像是从可用的图像中随机选择的,测试可能会失败,因此看起来没有发生变化。
我怎样才能避免像这样的误报?
答案 0 :(得分:1)
由于我们使用JavaScript,您可以像这样覆盖Math.random:
describe('some suite', function () {
it('Math.random should equal 1', function () {
var origRandom = Math.prototype.random;
Math.prototype.random = function(){return 1};
expect(Math.random()).toEqual(1);
Math.prototype..random = origRandom;
});
it('Math.random should equal 1 using jasmine', function () {
spyOn(Math, 'random').andReturn(1)
expect(Math.random()).toEqual(1);
});
});
另一种方法是将随机数传递给渲染函数,而不是在你想测试的函数内部创建
答案 1 :(得分:1)
您可以使用jasmine Spy behaviour检查是否正在调用您的方法。特别是spyMethod.callcount
,您可以使用它来检查方法被调用的次数。
例如。像这样:
var cycleMethod = SpyOn(jQPlugin.theCycleMethod).andCallThrough();
waits(1000);
runs(function() {
expect(cycleMethod.callCount).toEqual(2);
});
答案 2 :(得分:0)
您可以使用jquery toggle()在进行更改时添加类,然后搜索您添加的类。如果它不存在,调用切换将添加一个类,如果它存在则删除它,因此如果你应该有一个新图像,它将被设置,而不是如果你应该有原始图像。
答案 3 :(得分:0)
在这种情况下,我特别注意尽可能使我的设计模块化,因此我可以分别测试所有的零碎。听起来你应该这样做。这样,setInterval
的行为等对您的测试产生的影响较小或没有影响。
例如,您应该有专门的方法来选择下一个URL,您可以独立于其余代码进行测试。出于该方法的目的,您不关心原始图像是否在列表中,因为对于测试,您可以将图像列表设置为您想要的任何内容。在测试中,我会多次调用该方法,存储每次调用的结果,然后我断言每个结果中都没有相同的字符串。