茉莉花测试案例

时间:2012-12-16 22:17:43

标签: javascript testing jasmine jsunit

我写了一个javascript方法,可以在单击图像时更改建议框的值。

function startDestinationF(a) {
var startDestination = document.getElementById('startDestination');
startDestination.selectedIndex = (a);}

现在我必须编写一个jasmine测试用例来检查这个方法是否真的有效,但我真的没有。

我试过了:

describe("Change onclick the value of the drop down menu", function() {

var startDestination;

beforeEach(function() {
    startDestination = document.getElementById('startDestination'); 
  });

it("should change the value", function() {
    expect(startDestinationF(3)).toBe(startDestination.selectedIndex==3);
});});

但它说:“无法读取属性'selectedIndex'的null”。我是那个领域的新手,我真的需要一些帮助...

感谢

4 个答案:

答案 0 :(得分:1)

你的DOM中必须有id为startDestination的元素。

实现这一目标的两种方法:

  • 将元素硬编码到SpecRunner.html
  • 的body元素中
  • 使用JavaScript创建元素,并在运行该测试之前将其附加到DOM。

答案 1 :(得分:1)

老问题,但万一有人会找到它

it("should work", myTestFunction.bind(this, 'param1','param4'));
it("should work", myTestFunction.bind(this, 'param2','param3'));

function myTestFunction(param1, expected){
   expect(param1).toBe(expected);
}

我使用bind来使用必要的参数复制我的函数

答案 2 :(得分:0)

与Jasmine一样,您需要在DOM中创建带ID的元素。有很多方法可以做到这一点,我的方法是使用jasmine-fixture

affix('#startDestination')  --> This will create this in DOM <div id="startDestination">

如果您需要具有特定类型的输入,也可以这样做。

答案 3 :(得分:0)

这是你可以做到的一种方式,这通常是我这样做的方式。 我冒昧地使用jQuery:)

这是一个有效的傻瓜:http://plnkr.co/edit/93dyzvxa82sFWWFZ6NTi?p=preview

describe('test suite', function(){
   // this here represents your global function
   // I've added this here for the purpose of this demo
   function setValue(a) {
       $('#name').val(a);
    }       

   beforeEach(function(){
      this.element = $('<input id="name" type="text" />');
      this.element.appendTo('body');
   });

   // clean up
   afterEach(function(){
      this.element.remove(); 
   });

   it('should change the value', function(){
      //when
      setValue('Alex Baur');

     // then
     expect(this.element.val()).to.Equal('Alex Baur');
   });
});