gpt4 book ai didi

phantomjs - 如何将Sinon与CasperJS结合使用?

转载 作者:行者123 更新时间:2023-12-02 23:58:11 25 4
gpt4 key购买 nike

如何将Sinon与CasperJS一起使用?这是我正在使用的基本测试文件:

var url = 'http://localhost:3000/';

var sinon = require('sinon');
var server = sinon.fakeServer.create();

server.respondWith("GET", "/login",
[200, { "Content-Type": "application/json" },'{"id": 12}']);

casper.test.begin('integration',1,function suite(test){
casper.start(url,function start(){
test.assertHttpStatus(200,'http status is 200');
});

casper.run(function run(){
test.done();
});
});

然后这个脚本的调用方式如下:

casperjs test integration.js

以下是版本信息:

CasperJS version 1.1.0-DEV
at /usr/local/Cellar/casperjs/1/libexec,
using phantomjs version 1.9.1

下一步是填写登录模式并提交,这将执行 ajax 查询。我想模拟 jQuery 的 $.ajax 方法。问题是我收到此错误:“CasperError:找不到模块 sinon”。但是,Sinon 是在全局和本地安装的,并且该确切的 require 行在节点交互模式下工作得很好。

有人可以发帖或给我指点一下Sinon 与CasperJS 一起使用的示例吗?它不需要专门进行 ajax 模拟。任何用法都可以。

最佳答案

那里有很多问题。首先,您尝试像在节点中那样工作,但它在 casper 中不起作用,因为 casper 不关心您是否有 node_modules 目录,而且它也没有不要调查它。我假设你已经在你的node_modules目录中安装了sinon,所以你应该这样做:

var sinon = require('./node_modules/sinon');

诀窍是,您只能使用相对路径来获取安装在node_modules中的模块,因为对于casper来说,没有解析node_modules目录之类的东西。

下一部分你做错了,看起来你在 phantomjs 端和客户端之间感到困惑。上面的脚本在 phantomjs 端进行评估,而 html 中包含的脚本在客户端进行评估。这两者不共享任何内存,全局对象是不同的。所以你不能在 phantomjs 端执行 sinon.fakeServer.create(); ,因为它试图创建一个假的 XMLHttpRequest ,但这在 phantomjs 中不存在side,它存在于客户端。因此从技术上讲,您不需要在这里运行它。

因此,您需要做的是评估客户端中的 sinon 模块,并评估客户端中的脚本。

这给我们带来了以下代码:

var url = 'http://localhost:3000/';

// Patch the require as described in
// http://docs.casperjs.org/en/latest/writing_modules.html#writing-casperjs-modules
var require = patchRequire(require);
var casper = require('casper').create({
clientScripts: [
// The paths have to be relative to the directory that you run the
// script from, this might be tricky to get it right, so play with it
// and try different relative paths so you get it right
'node_modules/sinon/pkg/sinon.js',
'node_modules/sinon/pkg/sinon-server-1.7.3.js'
]
});

casper.test.begin('integration',1,function suite(test){
casper.start(url,function start(){
test.assertHttpStatus(200,'http status is 200');
casper.evalute(function () {
var server = sinon.fakeServer.create()
server.respondWith("GET", "/login",
[200, { "Content-Type": "application/json" },'{"id": 12}']);
});
});

casper.run(function run(){
test.done();
});
});

请注意,我没有包含对 var sinon = require('./node_modules/sinon'); 的调用,因为我们在客户端评估 sinon 时不再需要它.

关于phantomjs - 如何将Sinon与CasperJS结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com