2014-03-24 114 views
1

我想测试严重依赖API的Angular应用程序。该API正在与phpunit单独测试,我们正在创建灯具,所以我希望不必在Angular中创建另一套模拟灯具。我现在只使用了铬合金驱动器的量角器。AngularJS e2e使用量角器和远程API测试

首先,我必须通过不是Angular应用程序的页面登录。

然后我去一个网页,显示了ng-if='loadingCards'装载机和隐藏的表ng-if='!loadingCards',然后在API调用来检索卡完成后,中loadingCards值翻转。

下面是测试规范的开始,它会让您通过非角度登录,然后将您带到卡片列表页面。我想要做的就是看cards $ scope变量的内容,看看API确实返回了一些东西,但我总是得到一个空数组。

describe('User cards page', function() { 
    var driver; 
    var ptor; 

    beforeEach(function() { 
    ptor = protractor.getInstance(); 
    ptor.ignoreSynchronization = true; 
    browser.ignoreSynchronization = true; 
    driver = ptor.driver; 
    }); 

    it('should login', function() { 
    driver.get('http://local.local.com/login'); 
    driver.findElement(protractor.By.name('_username')).sendKeys('admin'); 
    driver.findElement(protractor.By.name('_password')).sendKeys('admin'); 
    driver.findElement(protractor.By.css('input[type="submit"]')).click(); 
    }); 

    it('should list cards', function() { 
    browser.get('http://local.local.com/cms/cards'); 

    var ucards = element.all(by.repeater('card in cards')).then(function(cards) { 
     console.log(cards); 
    }); 
    //expect(ucards.count()).toEqual(3); 
    }); 
}); 
+0

什么给手动,视觉检查? – bdavidxyz

+0

@ davidb583我不明白你的意见。 –

回答

0

我认为你在混合两件事。 你可以写:

element.all(by.repeater('card in cards')).then(function(cards) { 
    console.log(cards); 
}); 

或:

var ucards = element.all(by.repeater('card in cards')); 
ucards.then(function(cards) { 
    console.log(cards); 
}); 

,但你正在种...两者。

你有什么错误吗?你能检查你的当前网址吗?

expect(browser.getCurrentUrl()).toEqual('http://local.local.com/cms/cards'); 

问候!

+0

感谢您的回复@nilsK。我不认为我在中继器上得到承诺的方式是不正确的,但你说得对,我可以把它写得更清洁,更容易阅读。请参阅我对上面沃尔特斯的回答的评论。这是我添加一个S卡在网址应该是卡。 –

+0

啊,好的,太棒了......真的,这个语法起作用了吗?我确信这在我的测试中抛出了一个错误...... mhh;)问候 – nilsK

0

也许它()在登录发生的地方,跟着它()你在哪里检查卡的数量。我会建议将登录部分移至beforeEach。

如果这不起作用,也许一个ptor.sleep(300)可以帮助。放置在页面的browser.get()的正下方。 api可能没有返回值。

+0

谢谢你的回应沃尔特......我尝试了你的两个建议都无济于事。如果你知道未来,我不想将登录信息放在beforeEach上,因为一旦我登录了一次,我就有了一个会话,我不需要返回。我尝试了睡眠,但是这也没有改变任何事情。尽管如此,它确实导致我将超时设置为一分钟,所以我可以看看控制台,并看到我使用了错误的URL,但我认为我正在捕捉,但没有。谢谢你把我推向正确的道路! –

0

Walter帮助我通过使用sleep命令来调试此操作,以使chromedriver iwndow更长时间打开,以便我可以看到我使用的URL不正确。一个更多的测试来创建。关闭这个。

+0

我也使用sleep命令进行这种调试。将其设置为一分钟,以便您有机会查看正在制作的api调用。我仍然建议在beforeEach进行登录,因为这是为测试做好必要准备的适当位置。如果您已经登录,那么在那里检测,因此登录只发生一次。无论如何,很高兴我能帮上忙! –

+0

我正在做另一个文件中的登录,我确保在我的protractor.conf文件中首先运行。在每次测试之前,它真的减缓了登录速度。无论如何,调试技术是无价的。 –

+0

这听起来像是一个更好的解决方案。 –