如何重置单元测试?

时间:2015-04-13 06:43:25

标签: angularjs unit-testing jasmine karma-jasmine

我有一个单元测试,如下所示:

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);
    });
});

http://jsfiddle.net/bLg4veso/

它传递first test,但在second test失败。 second test将始终返回first test中设置的高度。我该如何重置它?

2 个答案:

答案 0 :(得分:2)

由于您要将元素附加到正文,因此您还需要手动将其删除。

将此行添加到每个测试的结尾

element.remove();

它应该有用。

答案 1 :(得分:1)

或者,您可以使用Jasmine中提供的afterEach()功能。它似乎等同于Python的tearDown()模块中的unittest,因为afterEach()在每次测试后都会执行。

通过使用afterEach()功能,您只需指定一次此清理工作。

您可以在Jasmine's introduction documentation page上详细了解afterEach()(以及beforeEach()等类似功能)。