测试新对象实例(jasmine)

时间:2016-05-19 19:36:56

标签: javascript jasmine karma-runner karma-jasmine

我有karma运行的测试,其中一个我创建了new instance对象并调用function使用this。普通浏览器this是对当前实例的引用,但在console.log之后的测试中,我看到了:

  

对象{文件:< ! - 这是执行上下文。

     

在iframe中加载。在每次执行运行之前重新加载。

为什么?



// createing the object

window.gr = window.gr || {};

gr.Notification = (function () {
    function Notification(node, message) {
        this.liveTime = 5000;
        this.template = this.createTemplate(message);
        this.node = null;
        this.appendTo(node);

        setTimeout(this.remove, this.liveTime);
    }

    Notification.prototype = {
        createTemplate: function (message) {
            var notification = document.createElement("div");
            notification.className = "notification";

            var _message = document.createTextNode(message);
            notification.appendChild(_message);

            return notification;
        },
        appendTo: function(node){
            this.node = node.appendChild(this.template);
        },
        remove: function(){
            console.log(this)
            this.node.parentNode.removeChild(this.node);
        }
    };

    return Notification;
})();


//test

beforeEach(function(){
       Notification = gr.Notification;
        jasmine.clock().install();
    });

it("should remove notification after 5s", function(){
        new Notification(document.body);

        jasmine.clock().tick(5001);

        expect(document.querySelectorAll(NOTIFICATION_SELECTOR).length).toEqual(0);
    });




1 个答案:

答案 0 :(得分:0)

您对this的{​​{1}}次引用,因为您调用了setTimeout,这是window对象的方法,因此该方法中的window指向this

你可以这样做:

window