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

时间:2015-11-26 18:11:04

标签: javascript local-storage 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.clearCachehttp://electron.atom.io/docs/v0.32.0/api/session/)清除会话信息,但我不知道如何从噩梦中访问会话对象。

1 个答案:

答案 0 :(得分:11)

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

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

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

  

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

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

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

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

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

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