javascript - 在实习生测试套件之间传递数据

标签 javascript node.js testing intern

我有一个非常大的测试套件 edit_person_test.js,我正试图将其分解为更小的测试套件。我想从主套件调用较小的套件,如 add_person_cancel.js,并将在主套件的 before() 中创建的数据传递到较小的测试套件(edit_person_test.js 第 75 行)。但是,当我尝试访问较小的测试套件中的数据时,它仍然为空。如何创建一份数据副本并将其传递到每个较小的测试套件中?

// Very large parent suite add_person_test.js
define([
  'intern!object',
  'pages/PersonTabPage',
  'pages/AddPersonPage',
  'data-objects/PersonData',
  './add_person_cancel'
], function(registerSuite, PersonTabPage, AddPersonPage, Person, addPersonCancel) {

registerSuite(function() {

  var personTabPage = null;
  var addPersonPage = null;
  var person = null;

  return {
    // Assumes we are logged in
    name: 'Edit Person Test',

    before: function() {
      person = new Person(); // randomly generated data to create person with
      personTabPage = new PersonTabPage(this.remote, this.timeout);
      addPersonPage = new AddPersonPage(this.remote, this.timeout);
    },

    // calling smaller suite here
    AddPersonCancel: addPersonCancel.CancelAddPersonTest(personTabPage, addPersonPage, person),

  };
});
});

// Smaller test suite add_person_cancel.js
define(function() {

  return function(personTabPage, addPersonPage, person) {
    return {
      // Assumes we are logged in
      name: 'Cancel Add Person Test',

      OpenAddPersonPage: function() {
        logger.info(person);
        return personTabPage.clickAddPerson()
          .getAccumulatedState();
      },

      ValidateButtonDisabledStatus: function() {
        return addPersonPage.personButtonStatus(function(status) {
            assert.isFalse(status, 'Buttons are enabled even before entering person name');
          })
          .getAccumulatedState();
      },

      EnterNameClickCancelButton: function() {
        return addPersonPage.enterFirstName(person.firstName)
          .enterLastName(person.lastName)
          .clickCancelButton()
          .waitForPageReady()
          .getAccumulatedState();
      },

      CheckPersonNameNotSaved: function() {
        return personTabPage
          .findInPersonsTableAssertion(person.firstName + ' ' + person.lastName, false, function(result) {
            assert.isFalse(result, 'Person name is saved even on closing the trowser using Cancel button');
          })
          .getAccumulatedState();
      }
    };
  };
});

最佳答案

这个 CancelAddPersonTest 函数是错误的:

 AddPersonCancel: addPersonCancel.CancelAddPersonTest(personTabPage, addPersonPage, person),

这个调用在构造对象字面量时发生,此时没有任何东西运行(你仍在创建将定义测试结构的对象字面量)所以你传递的所有这些变量都是空的,并且永远都是。

最简单的解决方案是提前创建一个对象,然后将其传递给 CancelAddPersonTest 而不是单个变量:

var personState = {
  personTabPage: null,
  addPersonPage: null,
  person: null
};

return {
  // ...

  before: function() {
    personState.person = new Person(); // randomly generated data to create person with
    personState.personTabPage = new PersonTabPage(this.remote, this.timeout);
    personState.addPersonPage = new AddPersonPage(this.remote, this.timeout);
  },

  // ...

  AddPersonCancel: addPersonCancel.CancelAddPersonTest(personState)
};

现在,在 CancelAddPersonTest 中使用该对象的属性,就像您现在尝试使用参数一样,一切都会按照您的意愿进行。

关于javascript - 在实习生测试套件之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34420199/

相关文章:

javascript - 当进度条达到 100% 时如何重定向到 url

javascript - 使用 Easel.js 将两个不同的图形组合成一个图形

node.js - 如何制作美味佳肴。与 .html 文件相同的 Handlebars

python - 在 DRF 中测试 throttle 的正确方法是什么?

java - 每次测试前运行方法

javascript - 使用 jquery 1.11.3.min.js 时,jquery on click 事件未触发。

Javascript拼接最后一个元素

node.js - Mongoose 嵌入式文档/DocumentsArrays id

node.js - 运行 Heroku 应用程序不显示上传文件中的更改

.net - 测试已编译二进制文件的功能