背景是我尝试在javascript中创建very basic thermostat然后使用jasmine进行测试。
我希望能够测试页面加载某些css(即恒温器是正确的颜色),然后更新它。检查颜色是否更新的测试通过正常,但是检查初始颜色是否正确的第一个测试没有通过。
在控制台中停止测试后,我意识到css样式表并未应用于测试 - 尽管它可以在普通的本地服务器上运行。这让我觉得使用loadStyleFixtures把css放在jasmine中有一些问题。
测试如下:
describe('Display', function(){
beforeEach(function(){
thermostat = new Thermostat();
jasmine.getFixtures().fixturesPath = '.';
loadFixtures('temperature_change.html');
jasmine.getStyleFixtures().fixturesPath = './public/css';
loadStyleFixtures('stylesheet.css');
});
...
it('can start as yellow', function(){
expect($('#temperature').css('color')).toEqual('rgb(255, 255, 0)');
});
样式表如下所示:
body {
background-color: navy;
color: white;
}
#temperature {
color: yellow;
}
如果添加到beforeEach函数,setStyleFixtures(' #temperature {color:yellow;}')也不起作用。我的补丁是使用jquery在beforeEach块中添加css而不是需要css样式表。
非常感谢任何帮助!
编辑:测试间歇性地通过 - 不知道该怎么做,除此之外可能是我的服务器设置或其他问题。
答案 0 :(得分:3)
最后,问题是我在测试的beforeEach块中以错误的顺序添加了Fixtures和styleFixtures。
所以这段代码会通过我的测试:
beforeEach(function(){
thermostat = new Thermostat();
jasmine.getStyleFixtures().fixturesPath = './public/css';
loadStyleFixtures('stylesheet.css');
jasmine.getFixtures().fixturesPath = '.';
loadFixtures('temperature_change.html');
});
但是这(我的原始代码)不会:
beforeEach(function(){
thermostat = new Thermostat();
jasmine.getFixtures().fixturesPath = '.';
loadFixtures('temperature_change.html');
jasmine.getStyleFixtures().fixturesPath = './public/css';
loadStyleFixtures('stylesheet.css');
});
我对订单重要性的想法是,灯具本身在样式表中添加,然后再次添加表单。我认为这混淆了Jasmine,并且需要首先加载样式表。
我认为间歇性传球是因为灯具偶尔会加载缓慢,首先加载样式表的时间,但我不确定。