Javascript 编写量角器场景的方法

Javascript 编写量角器场景的方法,javascript,testing,protractor,end-to-end,Javascript,Testing,Protractor,End To End,假设angular应用程序包含两个页面:contacts(包含带有联系人列表和“添加新联系人”按钮的表格)和new contact page(带有用于添加新联系人的表单)。我想写一个场景: 单击添加按钮 检查“新联系人”页面是否打开 输入联系人数据 按添加按钮 检查表中是否有新触点 对于这些页面,我有一些页面对象,这些页面对象具有“单击某些按钮”、“输入某些字段”等函数,所有函数都返回 编写测试场景的最佳方法是什么:使用类似js的链接 contactPage.clickAddButton() .

假设angular应用程序包含两个页面:contacts(包含带有联系人列表和“添加新联系人”按钮的表格)和new contact page(带有用于添加新联系人的表单)。我想写一个场景:

  • 单击添加按钮
  • 检查“新联系人”页面是否打开
  • 输入联系人数据
  • 按添加按钮
  • 检查表中是否有新触点
  • 对于这些页面,我有一些页面对象,这些页面对象具有“单击某些按钮”、“输入某些字段”等函数,所有函数都返回

    编写测试场景的最佳方法是什么:使用类似js的链接

    contactPage.clickAddButton()
    .then(function () {
        return newContactPage.checkUrl();
    })
    .then(function () {
        return newContactPage.inputData(data);
    })
    .then(function () {
        return newContactPage.clickAddButton();
    })
    .then(function () {
        return checkContact(data);
    })
    .then(function (succes) {
    }, function (error) {
        console.error(error);
    });
    
    或者我可以这样写:

    contactPage.clickAddButton();
    newContactPage.checkUrl();
    newContactPage.inputData(data);
    newContactPage.clickAddButton();
    checkContact(data);
    

    将场景拆分为多个“it”功能有意义吗?

    无需明确解决承诺。量角器有一个简单的接口,可以很自然地处理承诺队列。由于这是一个单独的场景,您可以将其放在一个
    it()
    中,除非您不重复:

    contactPage.clickAddButton();
    newContactPage.checkUrl();
    newContactPage.inputData(data);
    newContactPage.clickAddButton();
    checkContact(data);
    

    如果粘在量角器上,你应该按要求处理

    但如果你想保持承诺链的明确性(远离量角器,与应用程序编码格式保持一致,等等),那么可以这样重写:

    contactPage.clickAddButton()
      .then(newContactPage.checkUrl) // Must resolve `data` for next function
      .then(newContactPage.inputData) 
      .then(newContactPage.clickAddButton) // Must resolve `data` for next function
      .then(checkContact)
      .then(function (success) {
        // Test passes...
      }, function (error) {
        console.error(error);
      });
    

    但如果您使用的是量角器,那么将其编写为.

    好的,但是如果我想使用从函数解析的值,例如var getData=function(){var def=Q.defer();var data;…if(data){def.resolve(data);}else{def.reject(新错误),如何编写场景呢('Data not found!');}返回def.promise;};在场景中如何获取数据?@qweasd是的,如果您需要函数调用的解析结果-您需要
    then()
    。很好,谢谢。