gpt4 book ai didi

node.js - NightmareJS 在测试之间保持 session

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:27 25 4
gpt4 key购买 nike

我正在使用 NightmareJS 和 Mocha。一切似乎都工作正常,但我在分离测试时遇到问题,因为我的 session 在不同的测试用例中无法持续存在。

第一个测试顺利通过,但第二个测试应该能够编辑失败了,因为即使我使用分区选项,我最终也会进入相同的登录页面。我该如何克服这个问题?

require('mocha-generators').install();
var Nightmare = require('nightmare');
var expect = require('chai').expect;

describe('Nightmare JS tests', function() {
this.timeout(30000);

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

describe('base functionality', function() {

it('Should be able to login', function*() {
var nightmare = Nightmare({
show: true,
'webPreferences': {
partition: 'persist:somesession'
}
});
var result = yield nightmare
.goto(url)
.wait('.login')
.click('.login')
.wait('h4.heading')
.wait(1000)
.evaluate(function () {
return document.querySelector('h4.heading').innerHTML;

})
.end();

expect(result).to.equal("This is heading");

});

it('Should be able to edit', function*() {
var nightmare = Nightmare({
show: true,
'webPreferences': {
partition: 'persist:somesession'
}
})
var result = yield nightmare
.goto('http://localhost/app/company')
.wait("button.edit")
.click("button.edit")
.wait("input[type='text']")
.insert("input[type='text']", false)
.insert("input[type='text']", "This is some address")

.click("button[type='submit']")
.wait("div.success")
.evaluate(function () {
return document.querySelector("div.success").innerText;

})
.end()

expect(result).to.contain("Updated!");

});
});
});

最佳答案

Nightmare Github 项目上围绕此主题进行了一些有关共享 session 的讨论(请参阅 #430#398 了解更多信息)。 TL;DR 版本是您可以重置 session ,但跨实例使用相同的 session 尚未经过充分测试。 (从你的例子来看,你可能已经看过这些了。)

无论如何,我想我可以帮助解决您眼前的问题。两个建议:

  1. 使用相同的实例。您可以将 Nightmare 实例的创建移至 before() block ,并使用相同的实例进行测试。但这会引入测试依赖性,并且通常被认为是不可取的。
  2. 将整个登录过程移至 beforeEach() block 。将整个登录单元测试移至 beforeEach() block ,以便每次测试都能获得全新的登录信息。您还需要添加一个 afterEach() block 来清理 Nightmare 实例。这将使您的测试可以独立运行,但也会带来运行整个单元测试电池的大量时间开销。

基于您的示例的 #2 的(未经测试的)示例可能会有所帮助:

require('mocha-generators').install();
var Nightmare = require('nightmare');
var expect = require('chai').expect;

describe('Nightmare JS tests', function() {
this.timeout(30000);

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

describe('base functionality', function() {
var nightmare;
beforeEach(function*() {
nightmare = Nightmare({
show: true,
});
yield nightmare
.goto(url)
.wait('.login')
.click('.login')
.wait('h4.heading')
.wait(1000)
});

afterEach(function*() {
yield nightmare.end();
});

it('Should be able to edit', function*() {
var result =
yield nightmare
.goto('http://localhost/app/company')
.wait("button.edit")
.click("button.edit")
.wait("input[type='text']")
.insert("input[type='text']", false)
.insert("input[type='text']", "This is some address")

.click("button[type='submit']")
.wait("div.success")
.evaluate(function() {
return document.querySelector("div.success").innerText;

});
expect(result).to.contain("Updated!");

});
});

关于node.js - NightmareJS 在测试之间保持 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557359/

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