NPM模块有以下代码:
var actions = {};
var methods = ['POST', 'GET', 'PATCH', 'DELETE'];
methods.forEach(function(method) {
actions['mock' + method] = function(browser, url, response) {
browser.execute(function() {
result[method][url] = response;
});
}
});
module.exports = actions;
我想要4个方法:mockPOST,mockGET,mockDELETE,mockPATCH。每个方法都应该只使用回调函数执行browser.execute
,并将response
放在result
中相应的result['POST']
字段 - mockPOST
中,依此类推。但是当我执行
utils.mockPOST(browser, 'auth', {"result": "OK"});
我收到method is not defined
错误。我该怎么办?谢谢!
答案 0 :(得分:1)
我看到你正在为node.js使用selenium或webdriver。这让事情变得有点棘手。你不能在browser.execute
函数中使用闭包,原因是它根本不会在那里运行。 Webdriver会将该函数转换为字符串,将其传输到浏览器,并在浏览器中eval
该字符串。 nodejs闭包不会传递给浏览器,只会将函数代码作为字符串传递。
我认为result
对象已经在浏览器中全局定义。
那么你能做些什么呢?我总是建议不要将函数文字放在browser.execute
和browser.executeAsync
中,因为它们令人困惑。你可以在那里放一个字符串,它将被评估。请尝试以下方法:
methods.forEach(function(method) {
actions['mock' + method] = function(browser, url, response) {
var browserAction = "result[" + JSON.stringify(method) + "]" +
"[" + JSON.stringify(url) + "] = " +
JSON.stringify(response) + ";";
browser.execute(browserAction);
};
});