我目前正在编写一个javascript游戏模块,它将以下参数作为构造函数参数:
{
gameId : "string for unique game id",
cssSelector: "selector for target (used to initialze game)"
}
我找到了解决此问题的方法,请参阅下面的新评论
我对其他所有内容都有很好的测试覆盖率,但我无法弄清楚如何编写以下Jasmine测试:
describe("Initialization of game", function() {
it("Should throw expection if css selector is not found", function() {
// what goes here?
//negative scenario
expect(function(){
var game = new Game({gameId : '1', cssSelector : "#not-found"});
}).toThrow("Cannot find the element corresponding to cssSelector");
//positive senario
expect(function(){
var game = new Game({gameId : '1', cssSelector : "#found"});
}).not.toThrow("Cannot find the element corresponding to cssSelector");
});
“解决方案” 我说“解决方案”,因为感觉有点像黑客来解决这个问题。我使用的事实是测试是在HTML中运行的,我可以操纵环境。所以我做的是:
就是这样!
答案 0 :(得分:1)
如果您需要更深入的DOM测试,Jasmine将不会单独进行测试。
对于简单的DOM要求和单一测试,您可以继续做您正在做的事情。
对于简单但重复的测试,请使用beforeEach
和afterEach
来设置和销毁测试期间所需的DOM元素。
除了最简单的DOM测试之外,您可以使用类似:https://github.com/jeffwatkins/jasmine-dom的内容将Jasmine扩展到DOM中。
答案 1 :(得分:0)
可能是因为您错过);
之后的"#not-found"}
?
答案 2 :(得分:0)
在jQuery中,这将有效。 如果有这样的DOM节点,它的长度将大于0。
var exists = $('cssSelector').length > 0;