2017-02-12 37 views
0

我遇到了Jasmine(版本2.4)JavaScript测试框架的问题。Jasmine JavaScript测试框架的评估问题

我在udemy.com上创建了一门课程,但在线检查器不会接受我的代码的最后部分,我在这里使用“expect(variable).toBe(true);”茉莉花功能。

describe('A div with class', function() { 
    var parent = document.getElementsByClassName('media')[0]; 

    it('"media" should exist.', function() { 
    expect(parent).toBeDefined(); 
    }); 

    var child = document.getElementsByClassName('media-body')[0]; 

    it('"media-body" should exist.', function() { 
    expect(child).toBeDefined(); 
    }); 

}); 

describe('A div with class "media"', function() { 
    var parent = document.getElementsByClassName('media')[0]; 
    var child = document.getElementsByClassName('media-body')[0]; 

    var answer; 

    if (parent.firstChild == child) { 
    answer = true; 
    } else { 
    answer = false; 
    } 

    it('should have a div with class "media-body" as its child.', function() { 
    expect(answer).toBe(true); 
    }); 

}); 

从udemy.com页我的测试输出是:

媒体 “应该有一流的DIV ”媒体体“ 作为其子“与A级格”

预期。假为真”

我更新的代码现在工作得很好:

describe('A div with the class', function() { 

var class1 = 'media'; 
var failClass1 = '"' + class1 + '"' + ' should exist.' 

var class2 = 'media-body'; 
var failClass2 = '"' + class2 + '"' + ' should exist.' 

var element1 = null; 
var element2 = null; 

var relationship1_2 = null; 
var failRelationship = '"' + class2 + '"' + ' should be nested in a div with the class "' + class1 + '".' 

beforeEach(function() { 
    element1 = document.getElementsByClassName(class1)[0]; 
    element2 = document.getElementsByClassName(class2)[0]; 
    relationship1_2 = element1.contains(element2); 
}) 

it(failClass1, function() { 
    expect(element1).toBeDefined(); 
}); 

it(failClass2, function() { 
    expect(element2).toBeDefined(); 
}); 

it(failRelationship, function() { 
    expect(relationship1_2).toBe(true); 
}); 

});

+0

不知道为什么,但无论如何你可能想重写'expect(parent.firstChild === child).toBe(true);'并且保存6行代码。 –

回答

0

我推荐使用beforeEach块如下面的示例重新组织它:

describe('testing media tag hierarchy', function() { 

    var parent = null; 

    beforeEach(function() { 
    parent = document.getElementsByClassName('media')[0]; 
    }) 

    it('"media" should exist.', function() { 
    expect(parent).toBeDefined(); 
    }); 

    it('should have a div with class "media-body" as its child.', function() { 
    expect(parent.firstChild.hasClass('media-body')).toBeTruthy(); 
    }); 
}); 

我不知道这将解决你的问题,但它可能......它更易于阅读。

+0

以这种方式阅读比较容易,是的,但不幸的是这并不能解决我的问题。现在测试输出显示“预期的HTMLNode是HTMLNode”。对我不是很有帮助。我一直在想,如果是在udemy.com上的实现导致这些错误,或者如果它真的是我(和你)做错了。任何其他线索? –

+0

问题似乎是因为对象不一样。既然你想检查的唯一事情是元素是否有'media-body'标签,也许我们可以更新示例来检查而不是比较对象。我会更新它,你告诉我,如果它帮助:) –

+0

我使它与其他一些代码工作。不幸的是,我不能在这个评论中发布代码,因为它太长了,但你可以在我的初始文章底部看到我的新代码和正在运行的代码。 我还没有尝试过你的更新的例子,但它似乎也是一个可能的解决方案! –