Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用量角器和远程api进行AngularJS e2e测试_Javascript_Angularjs_Protractor_Angularjs E2e - Fatal编程技术网

Javascript 使用量角器和远程api进行AngularJS e2e测试

Javascript 使用量角器和远程api进行AngularJS e2e测试,javascript,angularjs,protractor,angularjs-e2e,Javascript,Angularjs,Protractor,Angularjs E2e,我想测试我的Angular应用程序,它严重依赖于API。API正在使用phpunit单独测试,我们正在创建装置,因此理想情况下,我希望不必在Angular中创建另一组模拟装置。我现在只在chrome驱动程序中使用量角器 首先,我必须通过一个不是Angular应用程序的页面登录 然后我转到一个页面,该页面显示了一个带有ng if='loadingCards'的加载程序,并隐藏了一个带有ng if='的表!加载卡片,然后当检索卡片的API调用完成时,加载卡片的值被翻转 下面是测试规范的开始,它让您通

我想测试我的Angular应用程序,它严重依赖于API。API正在使用phpunit单独测试,我们正在创建装置,因此理想情况下,我希望不必在Angular中创建另一组模拟装置。我现在只在chrome驱动程序中使用量角器

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

然后我转到一个页面,该页面显示了一个带有
ng if='loadingCards'
的加载程序,并隐藏了一个带有
ng if='的表!加载卡片
,然后当检索卡片的API调用完成时,
加载卡片
的值被翻转

下面是测试规范的开始,它让您通过非角度登录,然后进入卡片列表页面。我想做的就是查看
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);
  });
});
可能是在登录的it()之后,在it()之后,您可以检查卡数。我建议将登录部分移动到beforeach


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

我想你把两件事搞混了。 你可以写:

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

但是你在制造一种。。。两者都有

你有错误吗?你能查一下你当前的网址吗

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

你好

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

什么提供了手动、目视检查?@davidb583我不理解您的评论。感谢您的回复Walter。。。我试了你的两个建议,但都没有用。我不想把登录名放在beforeach中,因为一旦我有了一个登录名,我就有了一个会话,我不需要返回。我试着睡觉,但也没有改变任何事情。虽然,它确实让我将超时时间设置为一分钟,这样我就可以在控制台上看到我使用了错误的URL,我认为我正在捕获,但是没有。谢谢你把我推到正确的路径上!谢谢你的回复@nilsK。我不认为我在中继器上得到承诺的方式是错误的,但你是对的,我可以写得更干净,更容易阅读。见我对沃尔特回答的评论。是我在url中的卡片上添加了一个S,应该是卡片。啊,好吧,太好了。。。。真的,这种语法有效吗?我确信这会在我的测试中出错。。mhh;)Greetings我也使用sleep命令进行此类调试。将其设置为一分钟,这样您就有机会查看正在进行的api调用。我仍然建议在beforeach中登录,因为这是为测试做必要准备的适当位置。如果您已经登录,则在那里进行检测,因此登录只发生一次。不管怎样,很高兴我能帮上忙!我在另一个文件中登录,我确保该文件首先在我的dragrator.conf文件中运行。在每次测试之前,它都会减慢登录速度。尽管如此,调试技术还是无价的。这听起来是一个更好的解决方案。
expect(browser.getCurrentUrl()).toEqual('http://local.local.com/cms/cards');