我正在编写Protractor e2e测试。我有多个.js文件(spec.js)。我需要从另一个文件中调用一个文件。任何人都可以建议我一个想法..
答案 0 :(得分:1)
这个问题的解决方法很简单,就是实现Module Exports,它允许您在不同的目录或同一文件夹中要求特定的java脚本文件。这是一个易于实现的方法 - 我编写了一个使用它的格式,看看我为项目创建的这个github repo,它实现了你想要实现的目标。
对于要导入的javascript文件,请使用以下格式
var bindObjects;
var authServer;
var socketData = [];
var log_ValidConnections = true;
var log_InvalidConnections = true;
var log_GetFriendsRequest = false;
// For imports, to get the functions in another file
module.exports = {
init : function(binds) {
bindObjects = binds;
authServer = bindObjects['AUTH.Server'];
console.log("SocketServer - Syncing with AUTH Servers");
initServer(bindObjects['APP.SOCKET.IO']);
console.log("SocketServer - Loaded");
},
setBinding : function(data) {
bindObjects = data;
},
getSocketData : function() {
return socketData;
},
getSocket : function(username) {
return getSocket(username);
},
getSocketData : function(username) {
return getData(username);
}
};
以及导入上述javascript的模块
function setBinding(callInit) {
var socketServer = require("./sockets"); // Dont add .js
var bindObjects = {
'WEB.Server': webServer,
'CHAT.Server': chatServer,
'AUTH.Server': authServer,
'SOCKET.Server': socketServer,
'JSON.WEB.Tokens': jsonWeb,
'APP.Instance': app,
'APP.Http': http,
'APP.SOCKET.IO': io,
'APP.EXPRESS': express,
'APP.DEBUG': debugMode
};
if(callInit) {
webServer.init(bindObjects);
chatServer.init(bindObjects);
authServer.init(bindObjects);
socketServer.init(bindObjects);
} else {
webServer.setBinding(bindObjects);
chatServer.setBinding(bindObjects);
authServer.setBinding(bindObjects);
socketServer.setBinding(bindObjects);
}
}
// to make the module re-bindable create a exports
module.exports = {
rebindObjects : function() {
setBinding(false);
}
};
答案 1 :(得分:0)
您应该使用服务来避免使用调用其他控制器中的函数的代码来混淆控制器。如果您正在共享功能,只需在服务中定义它们并在需要时注入该服务。
angular.module('myApp', [])
.factory('myService', function() {
return {
sharedFunction: function (foo, bar) {
return foo + bar;
}
}
};
Answer Source (also possible duplicate of this question)
我没有做角度,所以这可能不是你需要的答案但是生病留下一个链接,只是希望它会变得有用(最初由thomastuts回答)