gpt4 book ai didi

javascript - mocha-casperjs 多客户端 node.js 应用程序的 headless 测试

转载 作者:行者123 更新时间:2023-11-29 22:01:18 27 4
gpt4 key购买 nike

我有一个在 Sails.js MVC 框架上运行的 node.js 应用程序。该应用程序支持使用 socket.io 的多个客户端的实时连接。它支持不同的 Angular 色。例如,您可以作为标准用户或版主登录。

为了测试,我使用 mocha-casperjs(以及 chai 和其他对我的问题不重要的东西)并使用 grunt mocha_phantomjs 从 grunt 运行测试.这些测试在我的项目根文件夹中的 Gruntfile.js 文件中指定。它们是这样指定的:

Gruntfile.js:

mocha_casperjs: {
files: {
src: [
'test/single-client.js',
'test/multi-client.js',
]
}
}

这是我要验证的测试用例:一旦版主单击特定按钮,div.container应该出现在主持人的 View 和标准用户的 View 中。

现在,测试单客户端方面效果很好。这是一个基本场景:

测试/单客户端.js:

describe('Clicking on a Button as a Moderator', function() {
it('results in div.container to appear on the Moderators view', function() {
casper
.start('http://localhost:1337')
.logInAsMod() //Note: This is pseudocode for submitting a login form
.thenClick('button')
.then(function() {
('div.container').should.be.inDOM.and.visible;
})
})
}

结果是:

Clicking on a Button as a Moderator
✓ results in div.container to appear on the Moderator's view

但是,我正在努力测试此测试用例的多客户端方面:div.container不仅应该出现在主持人的 View 中,还应该出现在标准用户的 View 中。据我了解,casper.run() mocha-phantomjs 模块将调用启动源代码中前面定义的测试的方法。所以这样的事情是行不通的:

测试/多客户端.js:

describe('Clicking on a Button as a Moderator', function() {
it('results in div.container to appear on the Moderators view and on the standard users view', function() {
casper
.start('http://localhost:1337')
.logInAsMod() //Note: This is pseudocode for submitting a login form
.thenClick('button')
.then(function() {
('div.container').should.be.inDOM.and.visible;
})
casper
.logInAsUser() //Note: This is pseudocode for submitting a login form
.then(function() {
('div.container').should.be.inDOM.and.visible;
})
})
}

上面代码的问题是 casper.run()调用只创建一个 casperjs 实例。如果我能写出这样的东西就太好了:

var casperMod = require('casper').create();
var casperUser = require('casper').create();

casperMod
.start('http://localhost:1337')
.logInAsMod() //Note: This is pseudocode for submitting a login form

casperUser
.start('http://localhost:1337')
.logInAsUser() //Note: This is pseudocode for submitting a login form

casperMod
.thenClick('button')
.then(function() {
('div.container').should.be.inDOM.and.visible;
})

casperUser
.then(function() {
('div.container').should.be.inDOM.and.visible;
})

所以我会有两个 casperjs 实例,我可以为其编写例程。但是,这会导致 Error: Cannot find module 'casper'因为 mocha-casperjs 框架不支持包含另一个 casperjs 实例。

永久注销并重新登录不是一种选择,因为我想测试应用程序的实时方面。

有没有人对如何在使用 mocha-casperjs 时实现 casperjs 的多个实例有建议?

最佳答案

你在任何框架中都会遇到这个问题,因为你需要两组 cookie,基本上是两个浏览器在运行。即使您确实创建了两个 casper 实例,您仍然处于共享 cookie 的一个 phantomjs 进程中。

可以做的是创建一个新的 WebPage 实例并将其换出当前的 casper 实例,并交换 cookies:

casper
.start('http://localhost:1337')
.logInAsMod()
.thenClick('button')
.then(function() {
('div.container').should.be.inDOM.and.visible;
})
.then(function() {
var userPage = require('webpage').create(),
modCookies = phantom.cookies

phantom.clearCookies()

casper
.logInAsUser()
.then(function() {
('div.container').should.be.inDOM.and.visible;
})
})

关于javascript - mocha-casperjs 多客户端 node.js 应用程序的 headless 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23613627/

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