Jasmine jquery测试没有参数的函数

时间:2015-04-28 16:49:23

标签: javascript jquery jasmine jasmine-jquery

我有以下功能:

function prompt_mandatory_field_completion(){
    $("#mandatory_fail").show(150, function() {
        setTimeout(function() {
            $("#mandatory_fail").fadeOut(500)
        }, 2000);
        });
    window.scrollTo(0,0)
}

我想用茉莉花进行测试,但无论我在规范文件中添加什么,测试似乎都会通过。

spec文件包含以下代码:

  it(' NEED TO FIX THAT FADE OUT Should prompt user to fill in mandatory questions via prompt_mandatory_field_completion function', function() {
    prompt_mandatory_field_completion();
    setTimeout(2000, function(){
      expect($('#mandatory_fail').css('display').toEqual('random thing'));
    });

在我的SpecRunner.html中,我使用了以下在此描述块中的每个测试之前运行的函数:

  function setupFixtures(){
    setFixtures('<div id="mandatory_fail" style="display:none;"></div>');
    prompt_mandatory_field_completion();
  };

知道如何将其变成有意义的测试吗?我想我一直盯着它看太长时间并从所有方向戳它。

最佳,

亚当

2 个答案:

答案 0 :(得分:0)

您正在尝试编写异步行为的功能测试。您可能有更好的经验尝试使用量角器进行此类测试。它更倾向于断言最终成真的事情。

然而,jasmine确实有一个异步工具,因为大约2.0,称为done(),它将坚持所有异步代码在测试通过或失败之前运行。

答案 1 :(得分:0)

您必须传递done函数才能获得异步测试:

it(' NEED TO FIX THAT FADE OUT Should prompt user to fill in mandatory questions via prompt_mandatory_field_completion function', function(done) {
    prompt_mandatory_field_completion();
    setTimeout(2000, function(){
        expect($('#mandatory_fail').css('display').toEqual('random thing'));
        done();
    });
}, 3000);

您还可以将超时作为最后一个参数传递,具体取决于您在茉莉花设置中设置的内容。

否则,如果执行超过超时,Jasmine会认为此测试失败。