10

我正在使用噩梦 js 登录到在本地存储中设置令牌的站点。但是,我对用户运行的任何未来测试都已经登录。我猜本地存储没有被清除。有没有办法做到这一点?我在test.js中的代码

require('mocha-generators').install();

var Nightmare = require('nightmare');
var expect = require('chai').expect;

describe('test login', function() {
  var nightmare = Nightmare({show: true})

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

  it('should login given right credentials', function*() {
    this.timeout(50000);
    console.log("running test");
    var link = yield nightmare
      .goto('http://127.0.0.1:3000/login')
      .wait(1000)
      .type('.email-field', 'username@email.com')
      .type('.password-field', 'password')
      .click('.login button')
      .wait(1000)

  });
})

我使用以下方式运行测试:mocha

测试运行良好并关闭。但是,当我再次运行时,用户以登录状态开始。无论如何要清除 nightmarejs 中的缓存或本地存储?

Electron 有一种方法可以通过session.clearCachehttp://electron.atom.io/docs/v0.32.0/api/session/)清除会话信息,但我不知道如何从噩梦中访问会话对象。

4

1 回答 1

14

好吧,我们可以使用 Electrons 的“web-preferences”属性。

var nightmare = Nightmare({
  show: false,
  webPreferences: {
    partition: 'nopersist'
  }
});

启动噩梦时,使用“web-prefences”分区属性来处理会话。更多信息在这里:https ://github.com/atom/electron/blob/master/docs/api/browser-window.md 。要点如下:

该页面将使用可用于应用程序中具有相同分区的所有页面的持久会话。如果没有 persist: 前缀,页面将使用内存中的会话。

所以基本上如果你初始化噩梦:

var nightmare = Nightmare({
  show: false,
  webPreferences: {
    partition: 'persist:derp'
  }
});

那么会话将在“derp”下持续存在,这在您测试经过身份验证的路由中的功能时会很有帮助。( derp并不重要,可以是以下的任何内容:)

如果您不希望会话持续存在,请不要使用persist:。我使用nopersist但这可以是任何不以persist为前缀的字符串:

编辑: show:false对会话不重要,它只是显示如果您设置电子(噩梦使用)正在做什么show:true,但是可以删除此行

于 2015-12-09T03:58:13.297 回答