我有一个单元测试,如下所示:
describe('myDirective:', function () {
var rootScope, compile;
beforeEach(module('myApp'));
beforeEach(function () {
//inject dependencies
inject(function ($compile, $rootScope) {
rootScope = $rootScope;
compile = $compile;
});
});
it('first test', function () {
var scope = rootScope.$new();
var element = angular.element('<my-directive><div id="myid" style="height:300px"></div></my-directive>');
element.appendTo(document.body);
element = compile(element)(scope);
console.log("#myid height: "+$("#myid").height());
expect($("#myid").height()).toBe(300);
});
it('second test', function () {
var scope = rootScope.$new();
var element = angular.element('<my-directive><div id="myid" style="height:400px"></div></my-directive>');
element.appendTo(document.body);
element = compile(element)(scope);
console.log("#myid height: "+$("#myid").height());
expect($("#myid").height()).toBe(400);
});
});
它传递first test
,但在second test
失败。 second test
将始终返回first test
中设置的高度。我该如何重置它?
答案 0 :(得分:2)
由于您要将元素附加到正文,因此您还需要手动将其删除。
将此行添加到每个测试的结尾
element.remove();
它应该有用。
答案 1 :(得分:1)
或者,您可以使用Jasmine中提供的afterEach()
功能。它似乎等同于Python的tearDown()
模块中的unittest
,因为afterEach()
在每次测试后都会执行。
通过使用afterEach()
功能,您只需指定一次此清理工作。
您可以在Jasmine's introduction documentation page上详细了解afterEach()
(以及beforeEach()
等类似功能)。