清除 Nightmare.js 中的缓存(Electron)

clear cache in Nightmare.js (Electron)

我正在使用 nightmare 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.clearCache (http://electron.atom.io/docs/v0.32.0/api/session/) 清除会话信息,但我不知道如何从 nightmare 访问会话对象。

好吧,我们可以使用 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。大意如下:

the page will use a persistent session available to all pages in the app with the same partition. if there is no persist: prefix, the page will use an in-memory session.

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

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

然后会话将在 'derp' 下持续存在,当您在经过身份验证的路由中测试功能时,这会很有帮助。 (derp 并不重要,可以是 persist:

之后的任何内容

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

的字符串

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