Using require with relative paths

前端 未结 4 987
灰色年华
灰色年华 2020-11-27 16:41

We have a rather big set of end-to-end tests on Protractor. We are following the Page Object pattern which helps us to keep our tests clean and modular. We also have a set o

4条回答
  •  春和景丽
    2020-11-27 17:37

    I had the same problem and I ended up with the following solution. In my Protractor config file I have a variable which stores a path to a base folder of my e2e tests. Also, Protractor config provides the onPrepare callback, where you can use a variable called global to create global variables for your tests. You define them as a properties of that global variable and use the same way you use globals browser or element in tests. I've used it to create custom global require functions to load different types of entities:

    // __dirname retuns a path of this particular config file
    // assuming that protractor.conf.js is in the root of the project
    var basePath = __dirname + '/test/e2e/';
    // /path/to/project/test/e2e/
    
    exports.config = {
    
        onPrepare: function () {
    
            // "relativePath" - path, relative to "basePath" variable
    
            // If your entity files have suffixes - you can also keep them here
            // not to mention them in test files every time
    
            global.requirePO = function (relativePath) {
                return require(basePath + 'po/' + relativePath + '.po.js');
            };
    
            global.requireHelper = function (relativePath) {
                return require(basePath + 'helpers/' + relativePath + '.js');
            };
    
        }
    
    };
    

    And then you can use these global utility methods in your test files right away:

    "use strict";    
    
    var localStorageHelper = requireHelper('localStorage');
    // /path/to/project/test/e2e/helpers/localStorage.js 
    
    var loginPage = requirePO('login');
    // /path/to/project/test/e2e/po/login.po.js
    
    var productShowPage = requirePO('product/show');
    // /path/to/project/test/e2e/po/product/show.po.js
    
    
    describe("Login functionality", function () {
    
        beforeEach(function () {
            browser.get("/#login");
    
            localStorageHelper.clear();
        });
    
        // ...
    
    });
    

提交回复
热议问题