如何重置单元测试?

How to reset unit test?

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

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 将始终 return 与 first test 中设置的高度相同。我该如何重置它?

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

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

element.remove();

它应该可以工作。

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

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

您可以在 Jasmine's introduction documentation page.

上阅读有关 afterEach()(以及 beforeEach() 等类似功能)的更多信息