在Nightmare.js中清除缓存(电子)

Saa*_*aad 9 javascript local-storage nightmare electron

我正在使用梦魇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)

  });
})
Run Code Online (Sandbox Code Playgroud)

我使用:mocha运行测试

测试运行正常并关闭.但是,当我再次运行时,用户会在登录时启动.无论如何要清除nightmarejs中的缓存或本地存储?

Electron有办法通过session.clearCache(http://electron.atom.io/docs/v0.32.0/api/session/)清除会话信息,但我不知道如何从噩梦中访问会话对象.

Saa*_*aad 12

好吧,我们可以使用电子的网络偏好属性.

var nightmare = Nightmare({
  show: false,
  webPreferences: {
    partition: 'nopersist'
  }
});
Run Code Online (Sandbox Code Playgroud)

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

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

所以基本上如果你做噩梦:

var nightmare = Nightmare({
  show: false,
  webPreferences: {
    partition: 'persist:derp'
  }
});
Run Code Online (Sandbox Code Playgroud)

然后会话将在'derp'下持续存在,当您在经过身份验证的路由中测试功能时,这会很有用.(DERP并不显著,可以是任何东西下面的坚持:)

如果你不希望会话持续存在,请不要使用persist : . 我使用nopersist但这可能是任何没有前缀的字符串:

编辑: show:false对于会话来说并不重要,它只是显示了如果你设置了什么电子(哪个噩梦使用)正在做什么show:true,但这条线可以删除

  • 似乎属性名称实际上是webPreferences,而不是web-preferences (2认同)