Тестирование транспортира: может ли кто-нибудь сказать мне, что я делаю неправильно с Require?

Я пытаюсь разбить свои тесты Protractor на управляемые файлы. Может кто-нибудь сказать мне, что я делаю неправильно с Require?

Вот пример:

Переменные: C:/tests/variables/signInVariables.js

var emailAddress = element(by.model('loginData.userName'));
var password = element(by.model('loginData.password'));
var signInButton = element(by.css('[data-auto-field="SignIn"]'));

Функции: C:/tests/functions/signInFunctions.js

var signInVariables = require ('../variables/signInVariables.js');

function signIn(a, b) {
    browser.get ('https://www.website.com');
    emailAddress.sendKeys(a);
    password.sendKeys(b);
    signInButton.click();
};

Тесты: C:/tests/protractor/conf.js

var signInFunctions = require ('../functions/signInFunctions.js');

it(' should sign in ', function() {
    signIn("someusername", "somepassword");
});

Запускаю и вот что получаю:

Failed: signIn is not defined

Я уверен, что это простое решение. Я просто не знаю, что делаю.


person Defpotec2020    schedule 20.10.2015    source источник
comment
Я уверен, что часть этой логики не имеет смысла. Я смотрю на это сейчас и вижу вещи, которые я облажался. Но то, что я делаю, требует правильного или неправильного?   -  person Defpotec2020    schedule 20.10.2015


Ответы (2)


require работает не совсем так, как вы ожидаете. Он не просто встраивает требуемый файл так, как вы его используете. require ищет либо файл JSON, либо объект module.exports. Вот простой пример.

require_me.js

module.exports = {a: "foo", b: "bar"};

index.js

var imports = require('require_me.js');
console.log(imports); // Will produce {a: "foo", b: "bar"}
person Brian Glaz    schedule 20.10.2015
comment
Основываясь на ответах @vrachlin и Брайана Глаза, я прочитал о требованиях и модулях, бросил module.exports = {}; вокруг переменных и функций в моих отдельных файлах и переформатировал мои знаки равенства в двоеточия и мои точки с запятой в запятые. Теперь это работает. Спасибо! - person Defpotec2020; 20.10.2015

вы можете прочитать больше о require и модулях здесь, ваша ошибка в том, что signInVariables не является модулем, там не является exports объектом для использования. вы могли бы сделать:

exports.emailAddress = element(by.model('loginData.userName'));
exports.password = element(by.model('loginData.password'));
exports.signInButton = element(by.css('[data-auto-field="SignIn"]'));

или определить signInVariables как модуль и экспортировать его целиком. надеюсь я помог.

person vrachlin    schedule 20.10.2015