gpt4 book ai didi

javascript - 用 mocha 测试回流存储的状态变化

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:10 25 4
gpt4 key购买 nike

我正在针对 Reflux 商店编写 mocha 测试,以验证某个操作是否会导致商店内的状态发生变化。代码的缩小版本如下:

商店:

var AppStore = Reflux.createStore({
init: function () {
this.foo = false;
},
listenables: [AppActions],
onFooAction: function() {
this.foo = !this.foo;
this.trigger({action: "foo-ed"});
};
});

Action :

var AppActions = Reflux.createActions([
"fooAction"
]);

测试:

it("toggles foo", function () {
expect(AppStore.foo).to.equal(false);

AppStore.listenables[0].fooAction();

expect(AppStore.foo).to.equal(true);
});

但是,第二个断言 (expect(AppStore.foo).to.equal(true);) 没有说明 foo 仍然是错误的。

通过在 onFooAction 方法中执行 console.log,我已经验证该方法确实被触发并且 this.foo 是被切换。

我在这里缺少什么基本的东西:概念上的还是其他方面的?我衷心希望这不是时间问题!

最佳答案

Actions 发出 store 监听的事件。基本上,您的测试运行得太快了。

通常,在我的测试中,我假设 Reflux 会做它正确做的事情,然后我直接调用监听器函数。您需要添加更多断言以确保正确连接 Reflux。

it("is configured", function () {
expect(AppStore.listenables).to.include(AppActions);
expect(AppActions.fooAction).to.be.a('function');
});

it("toggles foo", function () {
expect(AppStore.foo).to.equal(false);

AppStore.onFooAction();

expect(AppStore.foo).to.equal(true);
});

另一种测试方法是使用超时,但是当我在测试中设置超时时,我觉得很脏。

it("toggles foo", function (done) {
expect(AppStore.foo).to.equal(false);

AppStore.listenables[0].fooAction();

setTimeout(function () {
try {
expect(AppStore.foo).to.equal(true);
done();
} catch (e) {
done(e);
}
}, 15);
});

关于javascript - 用 mocha 测试回流存储的状态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033544/

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