1

我目前正在编写一个 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 中运行并且我可以操纵环境的事实。所以我所做的是:

  1. 在负面情况下,使用未找到的说明符。那么第一个期望就不会失败。
  2. 在正负测试用例之间,我使用 jQuerys .append() 方法将 id 为“found”的 div 添加到正文

而已!

4

3 回答 3

1

如果您需要更深入的 DOM 测试,Jasmine 不会独自完成。

对于简单的 DOM 要求和单一测试,您可以继续做您正在做的事情。

对于简单但重复的测试,使用beforeEachandafterEach设置和销毁测试期间需要的 DOM 元素。

除了最简单的 DOM 测试之外,您可以使用类似的东西:https ://github.com/jeffwatkins/jasmine-dom将 Jasmine 扩展到 DOM。

于 2013-01-10T15:12:11.647 回答
0

也许是因为你);"#not-found"}?

于 2013-01-10T11:41:36.773 回答
0

在 jQuery 中,这将起作用。如果有这样的 DOM 节点,它的长度将大于 0。

var exists = $('cssSelector').length > 0;
于 2013-01-10T12:15:49.383 回答